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

SQLSTATE[HY093]:Numero parametro non valido:il numero di variabili associate non corrisponde al numero di token sulla riga 102

Non hai legato tutti i tuoi attacchi qui

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

Hai dichiarato un'associazione chiamata :numRows ma in realtà non le colleghi mai nulla.

AGGIORNAMENTO 2019:continuo a ricevere voti su questo e quello mi ha ricordato un altro suggerimento

Le virgolette doppie sono interpolazioni di stringhe in PHP, quindi se hai intenzione di utilizzare variabili in una stringa di virgolette doppie, è inutile usare l'operatore concat. D'altra parte, le virgolette singole non sono interpolazioni di stringhe, quindi se hai solo una variabile alla fine di una stringa può avere senso, o usarla semplicemente per l'intera stringa.

In effetti, qui è disponibile una micro operazione poiché all'interprete non interessa analizzare la stringa per le variabili. La spinta è quasi impercettibile e totalmente ignorabile su piccola scala. Tuttavia, in un'applicazione molto grande, in particolare i buoni vecchi monoliti legacy, può esserci un notevole aumento delle prestazioni se le stringhe vengono utilizzate in questo modo. (e IMO, è comunque più facile da leggere)