Erreur : SQLSTATE[42000]: Erreur de syntaxe ou violation d'accès : 1064 Vous avez une erreur

Resuelto
modemo2018 Mensajes publicados 254 Estado Miembro -  
Reivax962 Mensajes publicados 3742 Estado Miembro -
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 :

```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());
}
```

Pour résoudre l'erreur, modifiez la requête SQL pour utiliser "AND" au lieu de la virgule entre les conditions dans la clause WHERE :

```php
$req = $bdd->prepare('SELECT nom, prenom FROM eleve WHERE iduser = :iduser AND class = :class');
```

1 respuesta

  1. Reivax962 Mensajes publicados 3742 Estado Miembro 1 011
     
    Hola,

    En la cláusula WHERE, no se separan los campos con comas como en un SELECT o un UPDATE, sino con operadores lógicos AND, OR, etc.

    Xavier
    0
    1. modemo2018 Mensajes publicados 254 Estado Miembro 2
       
      voilà ne partie d'un code de mon programme qui fonctionne bien, les champs sont séparé par des virgules:


      < código básico>
      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 ) ) {

      }

      < /código>
      0
    2. Reivax962 Mensajes publicados 3742 Estado Miembro 1 011
       
      Sí, pero ahora no es una cláusula WHERE, es una cláusula INSERT... En la que se enumeran campos y luego se enumeran valores.
      Mientras que, de hecho, una cláusula WHERE representa no una lista de campos, sino un cálculo de condiciones.
      0