Requette SQL sur la présence dans un tableau
Résolu/Fermé
A voir également:
- Requette SQL sur la présence dans un tableau
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Comment faire un tableau - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Trier un tableau excel - Guide
8 réponses
Utilisateur anonyme
2 juin 2012 à 22:20
2 juin 2012 à 22:20
Bonjour
Mais si, ça marche de faire une liste
Mais si, ça marche de faire une liste
// on fabrique la liste $liste=''; foreach ($ingredients_interdits as $ingredient ) $liste .= "'". mysql_real_escape_string ($ingredient) . "',"; $liste=substr($liste,0,-1); // pour enlever la virgule finale // la requête : $requete = "SELECT * FROM recette WHERE ingredient IN ($liste)"; $reponse=mysql_query($requete) or die (mysql_error());// pour un éventuel message d'erreur
Utilisateur anonyme
2 juin 2012 à 23:11
2 juin 2012 à 23:11
Aïe aïe aïe, je t'ai donné un code avec des fonctions mysql_ alors que tu utilises PDO. Ce que je t'ai donné n'est pas tu tout adapté, il faut que je revoie ma copie.
Utilisateur anonyme
2 juin 2012 à 23:16
2 juin 2012 à 23:16
// on fabrique la liste $liste=''; foreach ($ingredients_interdits as $ingredient ) $liste .= "'". $bdd->quote ($ingredient) . "',"; $liste=substr($liste,0,-1); // pour enlever la virgule finale // la requête : $requete = "SELECT * FROM recette WHERE ingredient IN ($liste)"; $stmt=$bdd->prepare($requete); $stmt->execute();
Quand j'utilise cette technique et que je fait afficher la liste des ingrédients (en fait des numéros correspondant aux ingrédients, j'ai bien:
''11'',''19'',''108''
mais quand je l'utilise cette liste dans la requête, j'ai le message d'erreur suivant:
Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '11'',''19'',''108'')' at line 1
Je comprend pas ce qui bug !!
''11'',''19'',''108''
mais quand je l'utilise cette liste dans la requête, j'ai le message d'erreur suivant:
Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '11'',''19'',''108'')' at line 1
Je comprend pas ce qui bug !!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
3 juin 2012 à 09:24
3 juin 2012 à 09:24
As-tu utilisé le code que je t'ai donné ?
Affiche la requête complète, si mysql te dit qu'il y a une erreur, c'est qu'il y en a une, et il suffit probablement de voir la requête pour voir l'erreur.
Ajoute un echo $requete.
Montre la partie du code qui génère la requete
Affiche la requête complète, si mysql te dit qu'il y a une erreur, c'est qu'il y en a une, et il suffit probablement de voir la requête pour voir l'erreur.
Ajoute un echo $requete.
Montre la partie du code qui génère la requete
voilà la partie du code commentée qui génère la requête:
$liste_aliments_interdits=''; //la liste dans laquelle je voudrais faire la clause WH
foreach ($array_alimentsInterdits as $ingredient )
$liste_aliments_interdits .= "'". $bdd-> quote ($ingredient) . "',";
$liste_aliments_interdits = substr($liste_aliments_interdits,0,-1); // pour enlever la virgule finale
?>
<p>
<?php print_r($liste_aliments_interdits) ?> </p>
<?php
// la requête :
$requete = "SELECT * FROM ingredient_recette WHERE ingr_id IN ($liste_aliments_interdits)";
echo $requete; ?>
<br/>
<?php
$tableauInt = $bdd->prepare($requete);
$tableauInt ->execute();
et voilà ce qu'il me renvoi:
SELECT * FROM ingredient_recette WHERE ingr_id IN (''13'',''108'')
Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '13'',''108'')' at line 1
est ce que ça ne serait pas parce que c'est des int et pas des string dans mon liste le problème ? Les recettes sont en fait des numéros dans ma base de donnée...
$liste_aliments_interdits=''; //la liste dans laquelle je voudrais faire la clause WH
foreach ($array_alimentsInterdits as $ingredient )
$liste_aliments_interdits .= "'". $bdd-> quote ($ingredient) . "',";
$liste_aliments_interdits = substr($liste_aliments_interdits,0,-1); // pour enlever la virgule finale
?>
<p>
<?php print_r($liste_aliments_interdits) ?> </p>
<?php
// la requête :
$requete = "SELECT * FROM ingredient_recette WHERE ingr_id IN ($liste_aliments_interdits)";
echo $requete; ?>
<br/>
<?php
$tableauInt = $bdd->prepare($requete);
$tableauInt ->execute();
et voilà ce qu'il me renvoi:
SELECT * FROM ingredient_recette WHERE ingr_id IN (''13'',''108'')
Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '13'',''108'')' at line 1
est ce que ça ne serait pas parce que c'est des int et pas des string dans mon liste le problème ? Les recettes sont en fait des numéros dans ma base de donnée...
Utilisateur anonyme
3 juin 2012 à 12:47
3 juin 2012 à 12:47
Ça y est, je vois l'erreur !
Regarde bien ce qu'il y a autour de 13 et de 108, ce ne sont pas des double quotes, mais deux simples quotes.
La fonction PDO::quote en ajoute, il est donc inutile d'en remettre une couche
-> dans la fabrication de la liste :
Regarde bien ce qu'il y a autour de 13 et de 108, ce ne sont pas des double quotes, mais deux simples quotes.
La fonction PDO::quote en ajoute, il est donc inutile d'en remettre une couche
-> dans la fabrication de la liste :
$liste_aliments_interdits .= $bdd-> quote ($ingredient) . ",";
2 juin 2012 à 23:03
J'ai encore un problème. Quand je fais comme vous me le recommandez, j'ai le message d'erreur suivant:
No database selected
alors que pourtant au début de mon code j'ai bien:
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=matthieu', 'root', '',$pdo_options);
C'est la première fois que ça me fait ça... pourquoi ?