sql >> Base de Datos >  >> RDS >> Mysql

SQLSTATE[HY093]:número de parámetro no válido:el número de variables vinculadas no coincide con el número de tokens en la línea 102

No ataste todas tus ataduras aquí

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

Has declarado un enlace llamado :numRows pero en realidad nunca le vinculas nada.

ACTUALIZACIÓN 2019:Sigo recibiendo votos positivos sobre esto y eso me recordó otra sugerencia

Las comillas dobles son interpolación de cadenas en PHP, por lo que si va a usar variables en una cadena de comillas dobles, no tiene sentido usar el operador concat. Por otro lado, las comillas simples no son una interpolación de cadenas, por lo que si solo tiene una variable al final de una cadena, puede tener sentido, o simplemente usarla para toda la cadena.

De hecho, hay una micro operación disponible aquí ya que al intérprete no le importa analizar la cadena en busca de variables. El impulso es casi imperceptible y totalmente ignorable a pequeña escala. Sin embargo, en una aplicación muy grande, especialmente en buenos monolitos antiguos heredados, puede haber un aumento notable en el rendimiento si las cadenas se usan de esta manera. (y en mi opinión, es más fácil de leer de todos modos)