Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak uprościć pracę z bindValue jeśli wartości jest dużo?
Forum PHP.pl > Forum > PHP
jolam
Witam serdecznie

Wstawiam do bazy nowe rekordy:
  1. $sql = "
  2. INSERT INTO produkty
  3. ( a, b, c, d )
  4. VALUES
  5. ( :a, :b, :c, biggrin.gif )
  6. ";
  7. $stmt = $dbh->prepare( $sql );
  8. $stmt->bindValue(':a', $a );
  9. $stmt->bindValue(':b', $b );
  10. $stmt->bindValue(':c', $c );
  11. $stmt->bindValue('biggrin.gif', $d );
  12. $stmt->execute();


I jak widzicie musiałam kilka razy napisać $stmt->bindValue. Czy da się jakoś uprościć i skrócić całą tą operacje? Tak żęby nie trzeba było się powtarzać? Jak mogłabym to zrobić?
Bardzo proszę was o pomoc.

pozdrawiam Jola
jmail
  1.  
  2. $sql = '
  3. INSERT INTO
  4. produkty
  5. ( a, b, c, d )
  6. VALUES
  7. (\''.$a.'\', \''.$b.'\', \''.$c.'\', \''.$d.'\')';
  8. $stmt = $dbh->prepare( $sql );
  9. $stmt->execute();
  10.  
jolam
To zły pomysł bo jeśli zmienne zawierają tekst z cudzysłowami i apostrofami, to wszystko się popsuje. Dlatego trzeba używać bindValue.

Może ktoś inny wie jak to uprościć?

pozdrawiam Jola
nospor
http://pl.php.net/manual/pl/pdo.prepare.php
I sobie przejrzyj przykłady to może doznasz olśnienia winksmiley.jpg

ps: przeciez to nie ma zadnego związku z bazą danych. Przenosze
jolam
Ja je czytałam! I to wiele razy.

Może jakaś podpowiedź ?
bardzo proszę rolleyes.gif

pozdrawiam Jola

nospor
blinksmiley.gif blinksmiley.gif blinksmiley.gif
Przeciez tam są dwa przykłady. Oba bardzo krótkie i oba zawierają przykład jak włozyc kilka wartosci bez uzycia bind.
Mam ci to samo wkleic tutaj bys to zauwazyla? No bez przesady smile.gif
jolam
O to chodzi?

$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();

Ale co ze zmiennymi, które mają cudzysłowy i znaki specjalne? Przecież po to używam tego bindvalue, żeby mi nie psuły się zapytania. No już zgłupiałam zupełnie, o co chodzi?
nospor
tak, o to chodzi.

Cytat
Ale co ze zmiennymi, które mają cudzysłowy i znaki specjalne? Przecież po to używam tego bindvalue, żeby mi nie psuły się zapytania. No już zgłupiałam zupełnie, o co chodzi?
No ale przeciez to jest dokladnie to samo co bind. Tylko zamiast kolejnych bind uzywasz execute z tablicą parametrow. Cała reszta jest identyczna i sie nie musisz martwic o zadne cudzyslowia. No przeciez w tych przykladach nie masz podanych zadnych cudzyslowi, nawet dla tekstu. No czytaj trochę z wiekszą uwagą...
zegarek84
http://php.net.pl/manual/pl/pdo.prepared-statements.php
Cytat
Przykład #3 Fetching data using prepared statements
This example fetches data based on a key value supplied by a form. The user input is automatically quoted, so there is no risk of a SQL injection attack.
  1. <?php
  2. $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
  3. if ($stmt->execute(array($_GET['name']))) {
  4. while ($row = $stmt->fetch()) {
  5. print_r($row);
  6. }
  7. }
  8. ?>
jolam
A jeszcze muszę zapytac czy da się jakoś zrobić aby to działało:
$sql = "
INSERT INTO litereczki
( a, b, c )
VALUES
( '$a', '$b', '$c' )
";
$stmt = $dbh -> prepare( $sql );
$stmt -> execute();

Bo jak w tych zmiennych są jakieś cudzysłowy albo apostrofy to się psuje wszystko. A jednak tak byłoby najszybciej pisać w skrypcie.

pozdrawiam Jola
Zyx
Tak się nie powinno pisać w ogóle, a już zwłaszcza w PDO. Zapomnij o czymś takim.
zegarek84
Cytat(jolam @ 27.09.2009, 19:09:38 ) *
A jeszcze muszę zapytac czy da się jakoś zrobić aby to działało:
$sql = "
INSERT INTO litereczki
( a, b, c )
VALUES
( '$a', '$b', '$c' )
";
$stmt = $dbh -> prepare( $sql );
$stmt -> execute();

Bo jak w tych zmiennych są jakieś cudzysłowy albo apostrofy to się psuje wszystko. A jednak tak byłoby najszybciej pisać w skrypcie.

pozdrawiam Jola

jeśli chcesz pdo i najszybciej to korzystaj ze znaków zapytania jako zmiennych i nie wykonuj prepare a w execute wstaw tablicę ze zmiennymi
  1. $sql = 'INSERT INTO litereczki ( a, b, c ) VALUES ( ?, ?, ?)';
  2. $stmt = $dbh -> prepare($sql);
  3. $stmt -> execute(array($a,$b,$c));
jolam
zegarek84 to ze znakami zapytania fajne jest i szybkie. Dziękuję serdecznie.


Jola
nospor
@jola przeciez na samym początku jak dawalem ci linka do dwoch przykladow to jeden z nich byl wlasnie ze znakami zapytania. Ty normalnie osłabiasz... blinksmiley.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.