Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQLSTATE[HY093] :numéro de paramètre non valide :le nombre de variables liées ne correspond pas au nombre de jetons sur la ligne 102

Vous n'avez pas lié toutes vos liaisons ici

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

Vous avez déclaré une liaison appelée :numRows mais vous ne lui avez jamais rien lié.

MISE À JOUR 2019 :Je continue à recevoir des votes positifs à ce sujet et cela m'a rappelé une autre suggestion

Les guillemets doubles sont une interpolation de chaîne en PHP, donc si vous allez utiliser des variables dans une chaîne de guillemets doubles, il est inutile d'utiliser l'opérateur concat. D'un autre côté, les guillemets simples ne sont pas une interpolation de chaîne, donc si vous n'avez qu'une seule variable à la fin d'une chaîne, cela peut avoir du sens, ou utilisez-la simplement pour toute la chaîne.

En fait, il y a un micro op disponible ici puisque l'interpréteur ne se soucie pas d'analyser la chaîne pour les variables. Le boost est presque imperceptible et totalement ignorable à petite échelle. Cependant, dans une très grande application, en particulier les bons vieux monolithes hérités, il peut y avoir une augmentation notable des performances si des chaînes sont utilisées comme celle-ci. (et IMO, c'est quand même plus facile à lire)