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
- Tableau word - Guide
- Clémence souhaite faire calculer automatiquement les prix de 30 produits dans trois devises. elle a déjà saisi une formule de calcul pour le tarif du premier produit dans la première devise. corrigez sa formule afin que recopiée vers le bas puis vers la droite, elle remplisse correctement tout le tableau. - Forum Excel
- Le fichier contient un tableau présentant un extrait des livres les plus prêtés à paris en 2016. filtrez le tableau pour ne faire apparaître que les bandes dessinées ado. puis filtrez le tableau pour ne faire apparaître que celles dont l'auteur est zep. quel est le titre de la bande dessinée ado de zep qui a été la plus prêtée d'après ce tableau ? ✓ - Forum Windows 10
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 ?