sql >> Databáze >  >> RDS >> Mysql

SQLSTATE[HY093]:Neplatné číslo parametru:počet vázaných proměnných neodpovídá počtu tokenů na řádku 102

Zde jste nesvázali všechny vazby

$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 );

Deklarovali jste vazbu nazvanou :numRows, ale ve skutečnosti k ní nikdy nic nenavážete.

AKTUALIZACE 2019:Stále dostávám kladné hlasy a to mi připomnělo další návrh

Dvojité uvozovky jsou v PHP interpolace řetězců, takže pokud budete v řetězci dvojitých uvozovek používat proměnné, je zbytečné používat operátor concat. Na druhou stranu, jednoduché uvozovky nejsou řetězcovou interpolací, takže pokud máte na konci řetězce pouze jednu proměnnou, může to dávat smysl, nebo to prostě použít pro celý řetězec.

Ve skutečnosti je zde k dispozici mikro operace, protože interpret se nestará o analýzu řetězce pro proměnné. Posílení je téměř nepozorovatelné a v malém měřítku zcela ignorovatelné. Avšak ve velmi rozsáhlých aplikacích, zejména starých dobrých starších monolitech, může dojít ke znatelnému zvýšení výkonu, pokud jsou takto použity struny. (a IMO se to stejně čte snadněji)




  1. Použití pluginu Percona Audit Log pro zabezpečení databáze

  2. Jaký je rozdíl mezi VARCHAR a CHAR?

  3. MariaDB v Tokiu

  4. Přehled ukládání do mezipaměti pro PostgreSQL