Erreur php sur contenu de la clause where d’une requête mysql
Bonjour
Contexte*:
Je gère le site de ma chorale. Ce site est bâti avec des frames.
En local, je suis en PHP 5.2.0 et mysql 5.0.22
Chez l'hébergeur (pages perso de Free) c'est PHP 5.1.3RC4-dev et mysql 5.0.77
Mon problème :
Un script php lance l’édition d’étiquettes-adresse et je suis bloqué par une erreur que php identifie dans la clause where de la requête mysql qui extraie les données requises.
La requête est la suivante*:
$query ="SELECT `dest_civilite`, `dest_prenom`, `dest_nom`, `dest_aLattention`, `dest_titre`, dest_etablissement`, `dest_adresse1`, `dest_adresse2`, `dest_bp`, `dest_code_postal`, dest_ville`, `dest_pays`, IF(`dest_etablissement`='', CONCAT (`dest_nom`, " ", `dest_prenom`), `dest_etablissement`) AS nom_mixte FROM fab_destinataires_voeux WHERE dest_traiter='Oui' AND dest_donateur='Oui' ORDER BY nom_mixte";
L’erreur retournée est*:
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\EasyPHP 2.0b1\www\EVI\gdc_EtiquettesDonateursAction.php on line 26
La ligne 26 commence avec le mot WHERE.
Je ne suis pas un expert, mais je ne vois vraiment pas ce qu’il y a d’incorrect dans cette clause.
La ligne de code suivante est le lancement de la requête avec une classe que j’utilise depuis toujours, issue du livre de Philippe Rigaux, Pratique de PHP et Mysql (ma bible)*:
$resultat = $bd→execRequete($query);
Merci de bien vouloir m’aider.
Cordialement
rreur php sur contenu de la clause where d’une requête mysql
Merci beaucoup Séb.
Mon problème est réglé et j'ai donc pu produire le fichier pdf d'étiquettes-adresse.
Je me suis fait avoir par la présence des guillemets dans le CONCAT. J'aurais dû le trouver.
Encore merci.
Cordialement.
Citation:
Envoyé par
Séb.
Tu devrais simplifier l'écriture de ta requête, tu y verrais plus clair.
Commence par supprimer les
` inutiles, c'est à dire tous dans ton cas.
Code:
1 2 3 4 5 6 7 8 9
| $sql = "
SELECT ALL
dest_civilite, dest_prenom, des_nom, dest_aLattention, dest_titre,
dest_etablissement, dest_adresse1, dest_adresse2, dest_bp, dest_code_postal, dest_ville, dest_pays,
IF(dest_etablissement = '', CONCAT(dest_nom, " ", dest_prenom), dest_etablissement) AS nom_mixte
FROM fab_destinataires_voeux
WHERE dest_traiter = 'Oui' AND dest_donateur = 'Oui'
ORDER BY nom_mixte ASC
"; |
On voit tout de suite que tu utilises des
" dans le CONCAT() de ton SQL, or 1. en SQL on délimite une chaîne avec
' et concernant l'erreur 2.
" est déjà utilisé pour délimiter ta chaîne PHP.
Autre point : SQL dispose de l'opérateur
CASE, tu peux l'utiliser à la place de la fonction propriétaire MySQL
IF() =>
https://dev.mysql.com/doc/refman/5.6...#operator_case