Erreur : Syntax error or access violation
Bonjour,
j'ai cette erreur avec cette expression : l'appel du 18 juin
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'appel du 18 juin %' OR desi LIKE '%l'appel du 18 juin %' OR desi LIK' à la ligne 2 in
Code:
1 2 3 4 5 6 7 8 9 10 11
| $sql="SELECT id, desi, desi_supp FROM collec_0 WHERE
desi LIKE '% ".$expression." %'
OR desi LIKE '%".$expression." %'
OR desi LIKE '% ".$expression."%'
OR desi_supp LIKE '% ".$expression." %'
OR desi_supp LIKE '%".$expression." %'
OR desi_supp LIKE '% ".$expression."%' ";
$reponse = $bdd->prepare($sql);
$reponse->execute(); |
je n'ai pas d'idée sur ce qui pose problème (peut être " ' " ??)
Pour travailler dans les règles
Quand la valeur de la variable est intégrée directement au texte SQL, on ne peut plus appeler cela une requête préparée, ou paramétrée.
L'idée est de pourvoir réutiliser cette requête avec des valeurs différentes.
Code:
1 2 3 4 5 6 7 8
| // 1 - prépare la requête - structure ONLY, pas de VARIABLE, un PARAMETRE
$requete = $bdd->prepare("SELECT * FROM collec_o WHERE desi like CONCAT('%', :param, '%') or desi_supp like CONCAT('%', :param, '%'); ");
// 2 - lie la variable $expression au paramètre :param de la requête préparée
$requete->bindValue(':param', $expression, PDO::PARAM_STR);
//3 - exécution !
$requete->execute(); |
Dans la mesure où '%' désigne un nombre indéfini de caractères, la condition " desi like '%truc%' " inclut les enregistrements qui vérifient " desi like '% truc%' " ou "desi like '%truc %' "
Lorsque l'on veut tester un nombre particulier de positions, il faut utiliser un ou des caractères de substitution '_', (=correspond à 1 caractère).