Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błędy w PDO
Forum PHP.pl > Forum > PHP
Robert3d
Witam nie rozumiem co się dzieje

Jeżeli całośc wpiszemy ręcznie DZIAŁA
Jeżeli treść zapytania wyglądała by tak ('SELECT :ID FROM test LIMIT 2,2'); DZIAŁA
Ale kod poniższy nie działa sad.gif

  1. <?php
  2.  
  3. $dbh = new PDO('mysql:host=localhost;dbname=test', 'root');
  4. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5.  
  6. $stmt = $dbh->prepare('SELECT * FROM test LIMIT :ID,2');
  7. $stmt->execute(array(":ID" => "2"));
  8.  
  9.  
  10. print_r($stmt->fetchAll());
  11.  
  12. ?>
Bags_Bunny
Zamień
  1. $stmt->execute(array(":ID" => "2"));
na
  1. $stmt->execute(array(":ID" => 2));

Jeśli podajesz string, to PDO dokłada cudzysłowia.
Robert3d
ZAMIENIŁEM ale niestety nadal występuje błąd sad.gif

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2',2' at line 1' in D:\Program Files\xampp\xampp\htdocs\obiektowo\test2.php:7 Stack trace: #0 D:\Program Files\xampp\xampp\htdocs\obiektowo\test2.php(7): PDOStatement->execute(Array) #1 {main} thrown in D:\Program Files\xampp\xampp\htdocs\test2.php on line 7


  1. $dbh = new PDO('mysql:host=localhost;dbname=test', 'root');
  2. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  3.  
  4. $stmt = $dbh->prepare('SELECT * FROM test LIMIT :ID,2');
  5. $stmt->execute(array(":ID" => 2));
  6.  
  7.  
  8. print_r($stmt->fetchAll());
  9.  
Bags_Bunny
U la la. Mea culpa.
Zobacz tutaj: http://php.net/manual/en/pdostatement.execute.php
W komentarzu z 08-Aug-2007 10:17, użytkownik simon dot lehmann at gmx dot de opisuje ten problem i podaje rozwiązanie.
Choć czytając manual stwierdzam, że to zostało zaprojektowane do podawania wartości dla kolumn i może się dziwnie zachowywać w innych przypadkach. Poczytaj również.
Robert3d
Hmm to PDO okazuje się być wcale poręczne tęsknie za czasami używania mysqli ale cóż ręczna walidacja danych ...

No cóż dzięki za pomoc rozwiązałeś mój problem punkcik dla ciebie.

  1. $stmt->bindValue(":ID", 2, PDO::PARAM_INT);


choć w zasadzie dla licz wystarczyło by sprawdzić czy są liczbami i dopuścić do użycia bez użycia tych śmiesznych metod.
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.