sql >> Database teknologi >  >> RDS >> Mysql

SQLSTATE[HY093]:Ugyldigt parameternummer:antallet af bundne variable matcher ikke antallet af tokens på linje 102

Du har ikke bundet alle dine bindinger her

$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 erklæret en binding kaldet :numRows, men du binder faktisk aldrig noget til den.

OPDATERING 2019:Jeg bliver ved med at få opstemmer om dette, og det mindede mig om et andet forslag

Dobbelte anførselstegn er strenginterpolation i PHP, så hvis du skal bruge variabler i en streng med dobbelte anførselstegn, er det meningsløst at bruge concat-operatoren. På bagsiden er enkelte anførselstegn ikke strenginterpolation, så hvis du kun har en variabel i slutningen af ​​en streng, kan det give mening, eller bare bruge det til hele strengen.

Faktisk er der en mikrooperation tilgængelig her, da fortolkeren er ligeglad med at analysere strengen for variabler. Boosten er næsten umærkelig og fuldstændig ignorerbar i lille skala. Men i en meget stor applikation, især gode gamle legacy monolitter, kan der være en mærkbar ydelsesforøgelse, hvis strenge bruges som denne. (og IMO, det er lettere at læse alligevel)




  1. MySQL-fejl For mange forbindelser

  2. GROUP BY + CASE erklæring

  3. SQL-sætninger Fejl i java-kode ved brug af Intellij og DB Navigator

  4. Oracle-forespørgsel for at hente kolonnenavne