sql >> Database >  >> RDS >> Mysql

SQLSTATE [HY093]:Ongeldig parameternummer:aantal gebonden variabelen komt niet overeen met aantal tokens op regel 102

Je hebt niet al je bindingen hier gebonden

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

Je hebt een binding met de naam :numRows gedeclareerd, maar je bindt er eigenlijk nooit iets aan.

UPDATE 2019:ik krijg hier steeds meer stemmen over en dat deed me denken aan een andere suggestie

Dubbele aanhalingstekens zijn tekenreeksinterpolatie in PHP, dus als je variabelen in een tekenreeks met dubbele aanhalingstekens gaat gebruiken, heeft het geen zin om de concat-operator te gebruiken. Aan de andere kant zijn enkele aanhalingstekens geen tekenreeksinterpolatie, dus als je maar één variabele aan het einde van een tekenreeks hebt, kan dat logisch zijn, of je kunt hem gewoon voor de hele tekenreeks gebruiken.

In feite is hier een micro-operatie beschikbaar, omdat de interpreter er niets om geeft om de string te ontleden op variabelen. De boost is bijna onmerkbaar en volledig te negeren op kleine schaal. In een zeer grote toepassing, met name goede oude legacy-monolieten, kan er echter een merkbare prestatieverbetering zijn als strings op deze manier worden gebruikt. (en IMO, het is sowieso makkelijker te lezen)




  1. Archiver opgehangen vanwege COMPATIBELE ORA-16484

  2. Gelijkwaardigheid van SQL-query's bewijzen

  3. Stel de tekenset en sortering van een tabel in MariaDB in

  4. PERIOD_ADD() Voorbeelden – MySQL