ďťż
Podstrony
|
telcocafeZapytanie:if(!$q) { $q = $db->prepare('SELECT i.ID, i.name, i.date, i.txt, c.name as cat FROM news i JOIN cats c ON i.cat = c.ID WHERE i.access=1 AND (c.access = 1 OR c.access = ?) ORDER BY i.ID DESC LIMIT ?'); } $q->execute(array('en', 20));Błąd: Syntax error or access violation: 1064 Something is wrong in your syntax obok ''20'' Dokumentacja MySQL: As of MySQL 5.0.7, placeholders can be used for the arguments of the LIMIT clause when using prepared statements. Wersja MySQL: 5.0.41-community-nt Wersja PHP: 5.3 Thread-Safe VC9 (używam PDO) PDO prawdopodobnie przekazuje wartości liczbowe jako string albo sam podpina dane do zapytania. W SQLite nie ma żadnych problemów. Użytkownik Ferrari edytował ten post 16 lipiec 2009, 10:52 a wyprintuj sobie SQLkę jaką chcesz wykonać i wrzuć do phpmyadmina - zobaczysz czy przejdzie czy nie. Przeszła. :) Zapytanie SQL zostało wykonane pomyślnie PREPARE query FROM 'SELECT i.ID,i.name,i.date,i.txt,c.name as cat FROM f3_news i JOIN f3_cats c ON i.cat=c.ID WHERE i.access=1 AND (c.access=1 OR c.access=?) ORDER BY i.ID DESC LIMIT ?'; # MySQL zwrócił pusty wynik (zero rekordów). SET @a = 'en'; # MySQL zwrócił pusty wynik (zero rekordów). SET @b =20; # MySQL zwrócił pusty wynik (zero rekordów). EXECUTE query USING @a, @b; # Rekordów: 1To wina PDO. Gratuluję twórcom niekompetencji. Spróbuję jeszcze podpiąć wartości za pomocą bindValue, choć w tym przypadku może lepiej nie korzystać z prepared statements. Niestety bindValue() z PDO::PARAM_INT też nie pomaga. To ogranicza użycie przygotowanych zapytań. Użytkownik Ferrari edytował ten post 16 lipiec 2009, 13:50 To wykonaj zapytanie bez bindowania, i/lub zgłoś błąd na php.net. I nie licz że php rozwijają sami kompetentni programiści ;) Przy nich ścięcia developerów Gentoo to pikuś :D |
|||
Sitedesign by AltusUmbrae. |