Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQLSTATE[HY093]:Nieprawidłowy numer parametru:liczba powiązanych zmiennych nie odpowiada liczbie tokenów w wierszu 102

Nie związałeś tutaj wszystkich wiązań

$sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate     FROM comments WHERE articleid = :art 
ORDER BY " . mysqli_escape_string($order) . " LIMIT :numRows";

$st = $conn->prepare( $sql );
$st->bindValue( ":art", $art, PDO::PARAM_INT );

Zadeklarowałeś powiązanie o nazwie :numRows, ale tak naprawdę nigdy niczego z nim nie wiążesz.

AKTUALIZACJA 2019:Ciągle otrzymuję głosy za tym i to przypomniało mi inną sugestię

Podwójne cudzysłowy to interpolacja łańcuchów w PHP, więc jeśli zamierzasz używać zmiennych w podwójnych cudzysłowach, nie ma sensu używać operatora concat. Z drugiej strony pojedyncze cudzysłowy nie są interpolacją ciągów, więc jeśli masz tylko jedną zmienną na końcu ciągu, może to mieć sens lub po prostu użyć jej dla całego ciągu.

W rzeczywistości dostępna jest tutaj mikro operacja, ponieważ interpreter nie dba o analizowanie łańcucha pod kątem zmiennych. Przyspieszenie jest prawie niezauważalne i całkowicie zignorowane na małą skalę. Jednak w bardzo dużych aplikacjach, zwłaszcza starych dobrych monolitach, może wystąpić zauważalny wzrost wydajności, jeśli ciągi są używane w ten sposób. (i IMO i tak jest łatwiej czytać)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień funkcję na PDO

  2. Usunąć wszystkie zduplikowane wiersze z wyjątkiem jednego w MySQL?

  3. Yii2:Kartik Gridview suma kolumny w stopce

  4. Zapytanie MySQL do obliczenia poprzedniego miesiąca

  5. Jak sprawdzić, kiedy serwer MySQL/MariaDB został uruchomiony?