Comment gérer vide DANS une requête sql?
$ids = array(1,2,3);
$in = implode(',',$ids);
$query = "SELECT * FROM user where user_id IN ($in) ";
Requête fonctionne sans problème. Mais quand $ids
est vide $ids = array();
J'ai eu d'erreur de la requête sql à juste titre, car SELECT * FROM user where user_id IN ()
n'est pas une requête valide .
Comment puis-je éviter une telle situation, sans vérification de tableau vide je.e faire de l'exécution de la requête n'importe quoi ?
Pourquoi ne pas vérifier pour tableau vide? MySQL attend juste que certains paramètres après, donc je suppose qu'il n'existe aucun moyen
J'espère
J'ai une situation où je ne peux pas vérifier pour le tableau vide . J'ai eu à faire requête à exécuter sans erreur . Tout ce que je peux faire est de changer des paramètres d'entrée . Requête s'exécute résultat de retour à zéro est ok pour moi .
J'espère
$ids
ne sont pas fournies par l'utilisateur et si, vous échapper correctement, avant de les insérer dans votre requête.J'ai une situation où je ne peux pas vérifier pour le tableau vide . J'ai eu à faire requête à exécuter sans erreur . Tout ce que je peux faire est de changer des paramètres d'entrée . Requête s'exécute résultat de retour à zéro est ok pour moi .
OriginalL'auteur Mr Coder | 2012-05-07
Vous devez vous connecter pour publier un commentaire.
Meilleure façon de gérer cela est:
Cela vous évite de si/d'autre de la structure et tout le reste
Si user_id est l'identificateur unique, il met en échec de la Conversion d'erreur.
Tout ceci est évidemment une solution intelligente, c'est déroutant et pas vraiment intuitive. Vous devez comprendre beaucoup de choses à lire. La anser de @faizan-ali est de mieux en la matière.
OriginalL'auteur Falcon
vous ne devez pas exécuter la requête lors de l' $est vide. Je pense que ce yoou besoin est quelque chose comme cela
Modifier
$ids
est vide? Aussi, l'injection SQL?parce que si $dans le vide, le sql va lever une exception, comme expliqué dans la question
Je n'ai pas demandé pourquoi il pas être exécuté, mais pourquoi ne devrait pas être exécuté. Comment savez-vous que l'OP ne veut pas sélectionner tous les utilisateurs dans ce cas?
voir la modifier. J'ai mis à jour mon commentaire précédent
J'ai une situation où je ne peux pas vérifier pour le tableau vide . J'ai eu à faire requête à exécuter sans erreur . Tout ce que je peux faire est de changer des paramètres d'entrée . Requête s'exécute résultat de retour à zéro est ok pour moi
OriginalL'auteur Faizan Ali
vous pouvez ajouter un 0 devant le $id de chaîne. Après tout, personne id commencera à partir de 0 dans une base de données.
Ou vous pouvez le faire comme ceci..
OriginalL'auteur Rukmi Patel
J'ai l'habitude de toujours ajouter un "invalid" de la valeur, de sorte que la liste n'est jamais vide:
Pas de conditionnel états sont tenus, en gardant le code est relativement propre.
Le "non valide" valeur doit être en dehors de la plage de valeurs autorisées, bien sûr.
(L'exemple ci-dessus suppose que valide
$ids
sont toujours positifs.)OriginalL'auteur biberesser
OriginalL'auteur Ovais Khatri
- Je faire plusieurs différents types de vérification dans des situations différentes pour s'assurer que l'instruction sql valide.
Dans ce type de vérification, je assurez-vous que la variable n'est pas vide ou faux
Généralement, j'utilise toute une série de
db_*
fonctions de valider la saisie j'ai passer dans les requêtes de sorte que je peux gérer plus avancé utilise vérifier si le$ids
tableau vient deVoici un code de test qui fonctionne bien pour moi dans des dizaines de situations.
De sortie:
OriginalL'auteur Michael Blood
Vous devez définir une condition de concaténation:
EDIT: correction de mon incompréhension.
OriginalL'auteur Nadir Sampaoli
pour la requête donnée, vous ne devriez pas l'exécuter du tout.
pour les autres cas, il pourrait être conditionnelle de concaténation, comme indiqué dans les autres réponses
OriginalL'auteur Your Common Sense