recherche

Maison  >  Questions et réponses  >  le corps du texte

Instruction de tableau PDO IN() ET espace réservé

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粉832490510P粉832490510405 Il y a quelques jours648

répondre à tous(2)je répondrai

  • P粉216807924

    P粉2168079242023-10-24 17:57:03

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

    répondre
    0
  • P粉501007768

    P粉5010077682023-10-24 09:30:01

    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

    répondre
    0
  • Annulerrépondre