Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2011, 14h09   #1
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
Par défaut [Mysqli] Afficher une requête préparée ?

Bonjour,

J'ai actuellement une requête préparée de recherche par titre et je l'améliore pour qu'elle puisse prendre plusieurs mots à la fois. Au final PHP me génère une variable qui contient mon like en string genre :

Code :
AND a.titre LIKE '%mot1%mot2%motx%'
Ensuite j'envoie la variable en question à ma fonction SQL qui la prend en paramètre. Dans ma requête je bind ma variable là où est censé être le LIKE...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$stmt = mysqli_prepare($conn, "
 
SELECT a.id, a.titre, a.texte, r.ss_titre, r.lieu_id, d.date1, d.date2, a.rubrique
FROM ARTICLES a
LEFT JOIN RENSEIGNEMENTS r ON a.id = r.article_id
LEFT JOIN DATES d ON r.date_id = d.id
WHERE a.edition IN ('NANCY', 'NANCY-METZ', 'NANCY-METZ-STRASB', 'NANCY-METZ-STR-DIJON', 'TTES EDITIONS')
AND ( 
   d.date1 = ( SELECT MIN( d1.date1 ) 			
   FROM ARTICLES a1
   LEFT JOIN RENSEIGNEMENTS r1 ON a1.id = r1.article_id
   LEFT JOIN DATES d1 ON r1.date_id = d1.id
   WHERE a1.titre = a.titre )
  OR r.article_id IS NULL
   )
   ?
   GROUP BY a.titre
   ORDER BY COALESCE(d.date1, '2050-12-31')
");
 
mysqli_stmt_bind_param($stmt, "s", $like);
Le problème c'est que la requête foire, et j'ai du mal à trouver d'où ça vient sans afficher la requête envoyée. Donc ma question est : Est-ce que c'est possible ou "I'm doing it wrong" ?

Merci
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 14h54   #2
Membre Expert
 
Avatar de David Guillot
 
Homme David Guillot
Chef de projet en SSII
Inscription : mars 2004
Messages : 879
Détails du profil
Informations personnelles :
Nom : Homme David Guillot
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2004
Messages : 879
Points : 1 149
Points : 1 149


Dans une requête préparée tu ne peux pas insérer à la volée de code SQL. Tout ce que tu peux insérer c'est une valeur. Exemples :
Code :
1
2
$stmt = mysqli_prepare("SELECT * FROM table ?");
mysqli_stmt_bind_param($stmt, "s", "WHERE col = 'valeur'");// interdit
Code :
1
2
$stmt = mysqli_prepare("SELECT * FROM table WHERE col = ?");// remarque : je n'ai pas mis de guillemets ou de quotes, le bind_param fait ça tout seul
mysqli_stmt_bind_param($stmt, "s", 'valeur');// OK
__________________
Avant de poser une question ici :

Après résolution de votre question : un clic sur , un et un vote pour les personnes qui vous ont aidé
David Guillot est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/08/2011, 14h58   #3
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
Ah d'accord. Du coup il faut que je passe par une requête simple ?
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 15h05   #4
Membre Expert
 
Avatar de David Guillot
 
Homme David Guillot
Chef de projet en SSII
Inscription : mars 2004
Messages : 879
Détails du profil
Informations personnelles :
Nom : Homme David Guillot
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2004
Messages : 879
Points : 1 149
Points : 1 149
Non non tu dois juste faire rentrer tout ce qui est du code SQL dans ta requête préparée, et réduire ta variable $like à '%mot1%mot2%motx%'
__________________
Avant de poser une question ici :

Après résolution de votre question : un clic sur , un et un vote pour les personnes qui vous ont aidé
David Guillot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 15h16   #5
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
Merci ça marche
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h27.


 
 
 
 
Partenaires

Hébergement Web