Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an err [Résolu]

Signaler
Messages postés
133
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
29 juin 2020
-
Messages postés
3603
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
-
Bonjour, je suis entrain de m'approndir sur le PHP PDO, lorsque j'essai de faire une lecture des données, il me renvoit cette erreur



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 ' class = 'CM2 '' at line 1


voici le code PHP


	
			//début de ton fichier php .... ça veut dire .. DEBUT !!!:
error_reporting ( E_ALL );
ini_set ( 'display_errors', TRUE );
ini_set ( 'display_startup_errors', TRUE );
		  
$class = !empty ( $_GET['class'] ) ? $_GET['class'] : NULL;
$cycle = !empty ( $_GET['cycle'] ) ? $_GET['cycle'] : NULL;
$iduser = !empty ( $_SESSION['id'] ) ? $_SESSION['id'] : NULL;
		  
		  
		  
		  
try
    {		
 $req = $bdd->prepare('SELECT nom, prenom FROM eleve WHERE iduser = :iduser, class = :class ');
	
	$req->execute(array('iduser' => $iduser, 'class' => $class ));
			 
	//Somme des élèves de la classe	
	 }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }
	




Quelqu'un peut-il m'aidé, comment faire résoudre cette erreur

1 réponse

Messages postés
3603
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
Bonjour,

Dans la clause WHERE, on ne sépare pas les champs avec des virgules comme dans un SELECT ou un UPDATE, mais avec des opérateurs logiques AND, OR, etc.

Xavier
Messages postés
133
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
29 juin 2020

voilà ne partie d'un code de mon programme qui fonctionne bien, les champs sont séparé par des virgules:


< code basic>
try {
$req = $bdd->prepare ( $sql );
$req->execute();
$result = $req->fetchColumn ();
$id = $result + 1;
$sql = 'INSERT INTO matiere(nomat, coefficient, `class`, `cycle`, `serie`, idmat,iduser)
VALUES(:nomat, :coefficient, :class, :cycle, :serie, :idmat, :iduser)';
$datas = array(':nomat' => $nomat, ':coefficient' => $coef, ':class' => $class, ':cycle' => $cycle, ':serie' => $serie, ':idmat' => $id, ':iduser' => $iduser);
try {
$req = $bdd->prepare ( $sql );
if ( $req->execute ( $datas ) ) {

}

< /code>
Messages postés
3603
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 juillet 2020
957
Oui mais là, ce n'est pas une clause WHERE, c'est une clause INSERT... Dans laquelle on liste des champs, puis on liste des valeurs.
Alors qu'en fait, une clause WHERE représente non pas une liste de champs, mais un calcul de conditions.