J'ai une instruction préparée par PDO dans laquelle les variables liées sont préparées dynamiquement (elles peuvent varier d'appel en appel) dans une fonction de recherche avancée sur notre site.PDO lance de manière inattendue des erreurs de variable liée avec plusieurs paramètres liés
Je sais l'appel SQL réel est correct, mais pour une raison quelconque, je me fais l'erreur suivante en essayant de passer ma variable de chaîne dans la déclaration préparée:
SQLSTATE [HY093]: Paramètre non valide Numéro: nombre de variables liées ne correspond pas à nombre de jetons
J'ai eu cette erreur avant et je connais très bien les étapes normales de résolution. Cependant, mes circonstances sont assez étranges. Avec le code exemple suivant:
$columns = "FirstName, LastName, ID, City, State";
$sWhere = "WHERE (FirstName LIKE ? AND LastName
LIKE ? AND ID LIKE ? AND City
LIKE ? AND State LIKE ?)";
$sVal = "'tom', 'lastname', '12345', 'Diego', 'CA'";
$sql = "SELECT ".$columns." FROM table ".$sWhere;
$stmt = $db->prepare($sql);
$stmt->execute(array($sVal));
où $sVal
peut aller de 'prenom', 'nom' .... à plus de 12 variables. Changer le nombre de variables a le même résultat. La déclaration complète est:
SELECT FirstName, LastName, ID, City, State
FROM table
WHERE (FirstName LIKE ? AND LastName
LIKE ? AND ID LIKE ? AND City
LIKE ? AND State LIKE ?)
Quand je lance ma requête en l'état, l'erreur ci-dessus est renvoyée. Quand j'ai pensé que j'avais en fait un nombre incorrect de variables, j'ai couru un ECHO sur ma déclaration de valeur de $ et j'ai constaté qu'ils correspondaient.
En tant que deuxième test, je pris la sortie de l'écho de la valeur $ et branché directement dans le tableau exécuter:
$stmt->execute(array('tom', 'lastname', '12345', 'Diego', 'CA'));
Cela fonctionne avec toute question du tout.
Il ne touche pas à ma question mais j'ai aussi placé des symboles% au sein de ma variable $ Sval pour l'exactitude:
$ Sval = " '% tom%', '% LastName%', '% 12345%', '% Diego%', '% CA%' ";
Cela fait ZERO sens pour moi que la sortie écho de la variable SAME fonctionnerait mais la variable elle-même ne le ferait pas. Des idées?
En l'état actuel, il n'y a pas suffisamment d'informations pour répondre à votre question. Pouvez-vous fournir la requête et le contenu de '$ value'? – netcoder
pouvons-nous voir plus de code? – Galen