AOP erreur: SQLSTATE[HY000]: General error: 2031
J'obtiens cette erreur gênante et bien que j'ai une idée de pourquoi je suis la, je ne peux pas pour la vie de me trouver une solution.
if ($limit) {
$sth->bindValue(':page', $page - 1, PDO::PARAM_INT);
$sth->bindValue(':entries_per_page', $page * $entries_per_page, PDO::PARAM_INT);
}
$sth->execute($criteria);
Requête contient des espaces réservés (:placeholder
). Mais pour ajouter ces LIMITE des espaces réservés, j'ai besoin d'utiliser la méthode manuelle (bindValue
) parce que sinon, le moteur va tourner dans les cordes.
Je ne suis pas non valides nombre de paramètres erreur, de sorte que tous les espaces réservés qui ont été liés correctement (je suppose).
Requête:
SELECT `articles`.*, `regional_municipalities`.`name` AS `regional_municipality_name`,
`_atc_codes`.`code` AS `atc_code`, `_atc_codes`.`name` AS `substance`
FROM `articles`
LEFT JOIN `_atc_codes`
ON (`_atc_codes`.`id` = `articles`.`atc_code`)
JOIN `regional_municipalities`
ON (`regional_municipalities`.`id` = `articles`.`regional_municipality`)
WHERE TRUE AND `articles`.`strength` = :strength
GROUP BY `articles`.`id`
ORDER BY `articles`.`id`
LIMIT :page, :entries_per_page
Toutes les valeurs d'espace réservé résident dans $les critères, sauf pour les deux dernières de la LIMITE, de qui j'ai manuellement lier avec bindValue()
.
Essayez de rechercher dans google "AOP de liaison de paramètres de LIMITE"
1) Il aurait été bien d'inclure les humains lisible message d'erreur au lieu de simplement le code obscur, 2) Montrer votre requête afin que nous puissions voir où l'erreur provient de.
Si il y avait un être humain, quel message lisible là, je serais: a) a probablement résolu maintenant, b) si non, alors inclus ici. C'était le message d'erreur complet, faites-moi confiance.
Erreur: 2031 (CR_PARAMS_NOT_BOUND)le Message: Pas de données fournies pour les paramètres dans l'instruction préparée à PARTIR de la Documentation dev.mysql.com/doc/refman/5.0/en/error-messages-client.html
Assurez-vous que vous êtes en liaison
1) Il aurait été bien d'inclure les humains lisible message d'erreur au lieu de simplement le code obscur, 2) Montrer votre requête afin que nous puissions voir où l'erreur provient de.
Si il y avait un être humain, quel message lisible là, je serais: a) a probablement résolu maintenant, b) si non, alors inclus ici. C'était le message d'erreur complet, faites-moi confiance.
Erreur: 2031 (CR_PARAMS_NOT_BOUND)le Message: Pas de données fournies pour les paramètres dans l'instruction préparée à PARTIR de la Documentation dev.mysql.com/doc/refman/5.0/en/error-messages-client.html
Assurez-vous que vous êtes en liaison
:strength
ainsi? Assurez-vous $limit
est truthy?
OriginalL'auteur silkfire | 2013-06-24
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser
->bind*
et->execute($params)
. Utiliser l'une ou l'; si vous passer des paramètres àexecute()
, ceux qui vont le faire AOP oublier les paramètres déjà lié par->bind*
.OriginalL'auteur deceze
Ce même message d'erreur 2031 peuvent être émises lors de l'une de lier deux valeurs avec le même nom de paramètre, comme dans:
$sth->bindValue(':colour', 'blue');
$sth->bindValue(':colour', 'red');
..alors, méfiez-vous.
OriginalL'auteur Nowdeen
Cette exception s'affiche également si vous essayez d'exécuter une requête avec des espaces réservés au lieu de préparer une déclaration comme
au lieu de
OriginalL'auteur AbcAeffchen
De le manuel:
Vous devez choisir une méthode. Vous ne pouvez pas mélanger les deux.
bindParam
/bindValue
pour les autres valeurs...soupir.Merci de voir stackoverflow.com/questions/10014147/... pour d'autres idées.
PDO::ATTR_EMULATE_PREPARES, true)
- ne pourrait-il pas activer émulé prépare? Je pense que c'est l'inverse si, très trompeuse.C'est pour repérer les fautes de frappe, j'ai juste corrigé.
J'apprécie que vous citez le manuel!!!
OriginalL'auteur Álvaro González
Ce n'est pas exactement une réponse, mais cette erreur se produit également si vous essayez d'utiliser un mot avec un trait d'union comme des espaces réservés, par exemple:
$sth->bindValue(':page-1', $page1);
Afin de mieux utiliser
$sth->bindValue(':page_1', $page1);
OriginalL'auteur Martin Schilliger
Ce qui arrive si vous avez le décalage des paramètres. Par exemple:
OriginalL'auteur Charlie
L'exception arrive aussi (au moins dans MySQL/PDO) lorsque votre SQL tente de mettre à JOUR un champ de type AUTO_INCREMENT.
OriginalL'auteur Roadowl