Instruction de tableau PDO IN() ET espace réservé
P粉832490510
P粉832490510 2023-10-23 21:43:13
0
2
663

J'ai trouvé ce code sur SO qui est idéal pour utiliser les instructions PDO et IN() ensemble.

$values = explode(',', $values) ; # 1,4,7

$placeholders = rtrim(str_repeat('?, ', count($values)), ', ') ;
$query = "SELECT * FROM table WHERE id IN ($placeholders)";

$stm = $db->prepare($query) ;
$stm->execute($values) ;

Mais comment mélanger d'autres éléments dans la requête pour qu'elle ressemble à ceci :

$query = "SELECT * FROM table WHERE id IN ($placeholders) AND product=?";
$stm = $db->prepare($query) ;
$stm->execute(array($values,$product)) ; //error happens when adding product placeholder

Je pensais que cela fonctionnerait, mais j'obtiens :

Avertissement : PDOStatement::execute() [pdostatement.execute] : SQLSTATE[HY093] : Nombre d'arguments invalide : le nombre de variables de liaison ne correspond pas au nombre de balises de la ligne 3 ($stm line)

Une idée pour que cela fonctionne comme prévu ?

Mise à jourexécuter sur le tableau, ne fonctionne toujours pas..

P粉832490510
P粉832490510

répondre à tous(2)
P粉216807924

Le problème ici est que execute nécessite un seul tableau. Vous ne pouvez pas transmettre plusieurs tableaux et, pire encore, vous ne pouvez pas imbriquer des tableaux.

Nous avons déjà un tableau $values parfait, alors réutilisons-le après avoir créé la chaîne d'espace réservé.

$values = explode(',', $values) ; # 1,4,7

$placeholders = rtrim(str_repeat('?, ', count($values)), ', ') ;
$query = "SELECT * FROM table WHERE id IN ($placeholders) AND product=?";

// New!
$values[] = $product;

$stm = $db->prepare($query);
$stm->execute($values);
P粉501007768

Solution

Si $values est un tableau, cela devrait fonctionner :

$query = "SELECT * FROM table WHERE id IN ($placeholders) AND product=?";
$stm->execute(array_merge($values, array($product)));

Instructions

execute() 需要提供一个参数(在本例中是一个数组)。通过添加 array_merge($values, array($product)),您可以创建一个数组,并在末尾添加 $product, donc la requête devrait fonctionner correctement.

Voir la démo ici : http://ideone.com/RcClX

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal