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 01/11/2011, 21h51   #1
Invité régulier
 
Inscription : avril 2011
Messages : 60
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 60
Points : 9
Points : 9
Par défaut select count avec implode

Bonjour a tous,
je sèche sur une erreur dont je ne trouve pas l'origine.
si quelqu'un pourrait m'éclairer

Citation:
erreur : Warning: PDO::query(): 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 'departement=1 OR departement=2 OR departement=3 OR departement=4 OR departement='
code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
$departs = $_POST['depart'];
 
		$departs = implode(" OR departement=", $departs);
		$departs = "departement=".$departs;
 
		// Post de la requete
		if($departs == NULL)
			{
			$requete = $departs;
			$smarty->assign('requete',$requete);
			}
			else
				{
				 $requete = $departs;
				 $smarty->assign('requete',$requete);
				}
 
		// nombre d'offres
		$offremotclef = $connexion -> query("SELECT count(*) AS id_offre FROM offres WHERE valide=1 ".$requete." ")->fetchColumn();
		$smarty->assign('offremotclef',$offremotclef);
le nOoB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2011, 23h03   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
il te manque un opérateur entre "valide=1" et "departement=1" :
Code :
"SELECT count(*) AS id_offre FROM offres WHERE valide=1 ".$requete." "
tu devrais faire :
Code :
$departs = "and departement=".$departs;
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 12h25   #3
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 663
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 663
Points : 5 390
Points : 5 390
Attention AND est prioritaire sur OR, donc il faut ajouter des parenthèses autour de ta série de OR, ou utiliser une condition IN.

Code :
1
2
$departs = implode(", ", $departs);
$departs = ' AND departement in ('.$departs.') ';
Dans ce genre de cas, une bonne idée est de décomposer l'exécution et de faire un affichage de la requête histoire de vérifier ce qu'il ya dedans et éventuellement de la faire tourner manuellement dans PhpMyAdmin (ou assimilé)
Code :
1
2
3
4
$query = "SELECT count(*) AS id_offre FROM offres WHERE valide=1 ".$requete." ";
echo 'Requete : '.$query;
$result = $connexion->query($query);
$offremotclef = $result->fetchColumn();
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 16h08   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par Celira Voir le message
Dans ce genre de cas, une bonne idée est de décomposer l'exécution et de faire un affichage de la requête histoire de vérifier ce qu'il ya dedans et éventuellement de la faire tourner manuellement dans PhpMyAdmin (ou assimilé)
Je dirais même que c'est TOUJOURS ce qu'il faut faire dès qu'une requête contient un paramètre !
Bien entendu, on enlève le test quand on est sûr de la requête générée.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web