J'ai une fonction comme ce qui suit:PHP imploser pour générer MySQL critères
public function foo ($cities = array('anaheim', 'baker', 'colfax'))
{
$db = global instance of Zend_Db_Adapter_Pdo_Mysql...
$query = 'SELECT name FROM user WHERE city IN ('.implode(',',$cities).')';
$result = $db->fetchAll($query);
}
Cela fonctionne bien jusqu'à ce que quelqu'un passe villes $ comme un tableau vide.
Pour éviter cette erreur, je suis logique cassantes la requête comme ceci:
$query = 'SELECT name FROM user';
if (!empty($cities))
{
$query .= ' WHERE city IN ('.implode(',',$cities).')';
}
mais ce n'est pas très élégant. Je pense qu'il devrait y avoir un meilleur moyen de filtrer par liste, mais je ne suis pas sûr de savoir comment. Aucun conseil?
Cela permettra également briser si un utilisateur soumet une ville qui contient ' '' (injection SQL) ou une virgule ... Vous devez les envelopper dans '' s –
Il est parfaitement bien de le faire de cette façon. S'il n'y a pas de ville, vous n'avez pas besoin d'une clause WHERE ... –
Cela me semble bien, mais vous pouvez utiliser l'une des nombreuses classes disponibles pour faire de belles requêtes préparées. À tout le moins, échapper à vos ficelles !! http://php.net/manual/fr/function.mysql-real-escape-string.php – Brad