0

J'utilise les méthodes de commodité de Zend pour les appels DB fetchAll. Ceci, comme devraient le savoir les connaisseurs, est une fonction qui permet le paramétrage des requêtes. Par exemple, la requête pourrait être:Paramétrage des requêtes MySQL dans la clause IN

$query = "select * from user where email = ?" 
$results = $this->_db->fetchAll($query, $email); 

Et voilà comment un paramétrage peut être atteint.

Ma requête cependant, est la suivante:

$query = "select * from user where email in ("[email protected]", "[email protected]","[email protected]"); 

Comment puis-je paramétrer la requête ci-dessus, parce que ces e-mails sont entrées utilisateur, donc je ne vais pas les avoir simplement dans la requête brute et d'essayer la Failed suivante :

$query = "select * from user where email in ? "; 
$this->_db->fetchAll($query, $commaSeparatedEmailList); 

$commaSeparatedEmailList = "(".implode("," , $emails).")";

Toutes les idées?

Répondre

2

Malheureusement, ZF est un peu incohérent sur la façon dont il gère cela. Certaines des classes fonctionnent avec des paramètres de tableau, mais malheureusement fetchAll() sur la classe de l'adaptateur n'en fait pas partie. Il y a deux (un peu en désordre) options que je suis au courant:

Passer à la construction de la requête avec Zend_Db_Select à la place (qui ne gère correctement):

$select = $db->select(); 
$select->from('user') 
     ->where('email IN (?)', $email); 

$db->fetchAll($select); 

ou bâton avec fetchAll et utiliser quoteInto:

$db->fetchAll("SELECT * FROM user WHERE ".$db->quoteInto('email IN (?)', $email)); 
Questions connexes