Maison > développement back-end > tutoriel php > Pourquoi PDO renvoie-t-il des résultats inattendus lors de l'utilisation d'une clause IN avec un tableau d'espaces réservés ?

Pourquoi PDO renvoie-t-il des résultats inattendus lors de l'utilisation d'une clause IN avec un tableau d'espaces réservés ?

Barbara Streisand
Libérer: 2024-12-21 08:31:13
original
985 Les gens l'ont consulté

Why Does PDO Return Unexpected Results When Using an IN Clause with an Array of Placeholders?

Utilisation de PDO avec un tableau de clauses IN [duplicata]

Question :

Lors de l'utilisation de PDO pour exécuter une instruction avec une clause IN qui utilise un tableau pour ses valeurs, pourquoi ce code renvoie-t-il un message inattendu résultat :

$in_array = array(1, 2, 3);
$in_values = implode(',', $in_array);
$my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (:in_values)");
$my_result->execute(array(':in_values' => $in_values));
Copier après la connexion

Réponse :

PDO a des difficultés à traiter les clauses IN qui utilisent des espaces réservés pour un tableau de valeurs. Pour résoudre ce problème, vous devez créer dynamiquement une chaîne d'espaces réservés et l'insérer dans la requête, tout en liant les valeurs du tableau séparément.

Pour les espaces réservés positionnels :

$in  = str_repeat('?,', count($in_array) - 1) . '?';
$sql = "SELECT * FROM my_table WHERE my_value IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($in_array);
Copier après la connexion

Pour les espaces réservés nommés :

// collect parameters for query
$params = ["foo" => "foo", "bar" => "bar"];

// prepare IN clause placeholders and values
$ids = [1,2,3];
$in = "";
$i = 0;
foreach ($ids as $item) {
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key;
    $in_params[$key] = $item;
}

// construct query and execute
$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stm = $db->prepare($sql);
$stm->execute(array_merge($params, $in_params));
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal