sql >> Databasteknik >  >> RDS >> Mysql

SQLSTATE[HY093]:Ogiltigt parameternummer:antalet bundna variabler matchar inte antalet tokens på rad 102

Du har inte bundit alla dina bindningar här

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

Du har deklarerat en bindning som heter :numRows men du binder aldrig något till den.

UPPDATERING 2019:Jag får hela tiden uppröstningar om detta och det påminde mig om ett annat förslag

Dubbla citattecken är stränginterpolation i PHP, så om du ska använda variabler i en sträng med dubbla citattecken är det meningslöst att använda operatorn concat. På baksidan är enkla citattecken inte stränginterpolation, så om du bara har en variabel i slutet av en sträng kan det vara vettigt, eller bara använda den för hela strängen.

Faktum är att det finns en mikrooperation tillgänglig här eftersom tolken inte bryr sig om att analysera strängen för variabler. Förstärkningen är nästan omärkbar och helt ignorerbar i liten skala. Men i en mycket stor applikation, särskilt gamla gamla monoliter, kan det bli en märkbar prestandaökning om strängar används på det här sättet. (och IMO, det är lättare att läsa ändå)




  1. Java PreparedStatement och ON DUPLICATE KEY UPDATE:hur vet jag om raden infogades eller uppdaterades?

  2. CONCAT kolumner med Laravel 5 vältalig

  3. Procedur för att exportera tabell till flera csv-filer

  4. Om variabel är lika med värde php