Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Błędy w PDO
Robert3d
post 20.11.2011, 01:04:01
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 3
Dołączył: 22.04.2006

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
Bags_Bunny
post 20.11.2011, 01:12:25
Post #2





Grupa: Zarejestrowani
Postów: 262
Pomógł: 39
Dołączył: 12.04.2004

Ostrzeżenie: (0%)
-----


Zamień
  1. $stmt->execute(array(":ID" => "2"));
na
  1. $stmt->execute(array(":ID" => 2));

Jeśli podajesz string, to PDO dokłada cudzysłowia.


--------------------
rm -rf /*
Go to the top of the page
+Quote Post
Robert3d
post 20.11.2011, 01:14:56
Post #3





Grupa: Zarejestrowani
Postów: 102
Pomógł: 3
Dołączył: 22.04.2006

Ostrzeżenie: (0%)
-----


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.  
Go to the top of the page
+Quote Post
Bags_Bunny
post 20.11.2011, 01:24:53
Post #4





Grupa: Zarejestrowani
Postów: 262
Pomógł: 39
Dołączył: 12.04.2004

Ostrzeżenie: (0%)
-----


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ż.


--------------------
rm -rf /*
Go to the top of the page
+Quote Post
Robert3d
post 20.11.2011, 01:33:36
Post #5





Grupa: Zarejestrowani
Postów: 102
Pomógł: 3
Dołączył: 22.04.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Robert3d 20.11.2011, 01:35:07
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.06.2025 - 02:53