Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQLSTATE[HY093]:Ungültige Parameternummer:Die Anzahl der gebundenen Variablen stimmt nicht mit der Anzahl der Token in Zeile 102 überein

Sie haben hier nicht alle Bindungen gebunden

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

Sie haben eine Bindung namens :numRows deklariert, aber Sie binden nie etwas daran.

UPDATE 2019:Ich bekomme immer wieder Upvotes dazu und das hat mich an einen anderen Vorschlag erinnert

Doppelte Anführungszeichen sind eine Zeichenfolgeninterpolation in PHP. Wenn Sie also Variablen in einer Zeichenfolge mit doppelten Anführungszeichen verwenden, ist es sinnlos, den Concat-Operator zu verwenden. Auf der anderen Seite sind einfache Anführungszeichen keine String-Interpolation. Wenn Sie also nur eine Variable am Ende eines Strings haben, kann dies sinnvoll sein, oder Sie verwenden sie einfach für den gesamten String.

Tatsächlich ist hier eine Mikrooperation verfügbar, da sich der Interpreter nicht darum kümmert, die Zeichenfolge nach Variablen zu analysieren. Der Boost ist fast unmerklich und im kleinen Maßstab völlig zu ignorieren. In einer sehr großen Anwendung, insbesondere in guten alten Legacy-Monolithen, kann es jedoch zu einer spürbaren Leistungssteigerung kommen, wenn Zeichenfolgen wie diese verwendet werden. (und meiner Meinung nach ist es sowieso einfacher zu lesen)