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

Signaler
Messages postés
63
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019
-
Reivax962
Messages postés
3527
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
12 décembre 2019
-
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
Messages postés
3527
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
12 décembre 2019
920
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
modemo2018
Messages postés
63
Date d'inscription
vendredi 15 novembre 2019
Statut
Membre
Dernière intervention
12 décembre 2019

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>
Reivax962
Messages postés
3527
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
12 décembre 2019
920
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.