Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PDO][MySQL] Podpinanie w LIMIT
Forum PHP.pl > Forum > PHP
WebCM
Zapytanie:
  1. <?php
  2. if(!$q)
  3. {
  4.    $q = $db->prepare('SELECT i.ID, i.name, i.date, i.txt, c.name as cat
  5.        FROM news i JOIN cats c
  6.        ON i.cat = c.ID
  7.        WHERE i.access=1 AND (c.access = 1 OR c.access = ?)
  8.        ORDER BY i.ID DESC LIMIT ?');
  9. }
  10. $q->execute(array('en', 20));
  11. ?>

Błąd:
Cytat
Syntax error or access violation: 1064 Something is wrong in your syntax obok ''20''

Dokumentacja MySQL:
Cytat
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 przekazuje wartości liczbowe jako string. W SQLite nie ma żadnych problemów.

Sprawdziłem w phpMyAdmin:
  1. Zapytanie SQL zostało wykonane pomyślnie
  2.  
  3. PREPARE query FROM 'SELECT i.ID,i.name,i.date,i.txt,c.name as cat
  4. FROM news i JOIN cats c ON i.cat=c.ID
  5. WHERE i.access=1 AND (c.access=1 OR c.access=?)
  6. ORDER BY i.ID DESC LIMIT ?';
  7. # MySQL zwrócił pusty wynik (zero rekordów).
  8.  
  9. SET @a = 'en'; # MySQL zwrócił pusty wynik (zero rekordów).
  10. SET @b = 20; # MySQL zwrócił pusty wynik (zero rekordów).
  11.  
  12. EXECUTE query USING @a, @b; # Rekordów: 1
Niestety bindValue() z PDO::PARAM_INT też nie pomaga. To ogranicza użycie przygotowanych zapytań.

Czy jest jakieś obejście? Czy pozostaje wstawiać wartości bezpośrednio do zapytania?

Poruszyłem ten temat już na innym forum, jednak na IRC-u twierdzą, że działa podpinanie do LIMIT w PHP 5.3.
erix
http://blog.ulf-wendel.de/?p=191

  1. <?php
  2. $stmt->bindValue(':limit', 1, PDO::PARAM_INT);
  3. -->
  4. >pdo_mysql_stmt_execute
  5. | info : stmt=0
  6. | info : SELECT * FROM test LIMIT 1
  7. >pdo_mysql_stmt_execute
  8. ?>
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.