Merci d'intervenir, j'arrive pas a trouver une solution pour Warning: PDOStatement::execute(): SQLSTATE[4200]

Petit nouveau ! | 1 Messages

30 août 2015, 15:03

Bonjour,

Tout d'abord merci infiniment de fait que vous avez décidé de m'aider :

j'ai un problème dans ces requêtes Mysql :
$id_client=$_SESSION['id_client'];
$test=$DB->exec("INSERT INTO commande(`id_client`,`id_status`) VALUES($id_client,2)");
$comd=$DB->query("select id_comm from commande where id_client=$id_client AND ((CURRENT_TIMESTAMP - date_cmd)<1000)");
je les ai exécutés dans phpmyadmin: et elles sont bien fonctionné.mais lorsque je reviens vers mon code php. il declare ces warning:

Warning: PDOStatement::execute(): 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 '2)' at line 1 in C:\xampp\htdocs\t\designshop\db.class.php on line 36

Warning: PDOStatement::execute(): 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 'AND ((CURRENT_TIMESTAMP - date_cmd)<1000)' at line 1 in C:\xampp\htdocs\t\designshop\db.class.php on line 28
[/b]


et voila ma db.class :
<?php
class DB{

    private $host='localhost';
    private $username='root';
    private $password='';
    private $database='designshop';
    private $db;

    public  function __construct($host = null,$username=null,$password=null,$database=null){
        if($host!=null){
            $this->host=$host;
            $this->username=$username;
            $this->password=$password;
            $this->database=$database;
        }
        try{
            $this->db= new PDO('mysql:host='.$this->host.';dbname='.$this->database, $this->username, $this->password, array(
                PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
                PDO::ATTR_ERRMODE =>PDO::ERRMODE_WARNING
                ));
        }catch (PDOException $e){
            die('<h1>Impossible de se connecter a la base de donnee</h1>');
        }
    }
    public function query($sql,$data = array()){
            $req=$this->db->prepare($sql);
            $req->execute($data);
        return $req->fetchAll(PDO::FETCH_OBJ);


    }

    public function exec($sql,$data = array()){
        $req=$this->db->prepare($sql);
        $req->execute($data);
    }

}
?>
Modifié en dernier par agrram le 30 août 2015, 15:18, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

30 août 2015, 15:09

Modération :
Tes délais ne nous intéressent pas.
Nous savons que tu es en difficulté puisque tu demandes de l'aide,
mais nous sommes tous bénévoles et répondons selon nos disponibilités.

Par ailleurs, afin d'obtenir une aide efficace et de faciliter la lecture du forum, merci d'utiliser un titre clair décrivant de façon précise le problème rencontré.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 42 Messages

30 août 2015, 17:24

Salut,

quand on analyse ton code, on remarque que le problème est toujours au niveau de $id_client

Je pense que cette variable ne contient rien dans ton script. Pour vérifier, fais
echo $id_client
avant tes requêtes.

vérifie qu'il ait bien été attribué une valeur à $_SESSION['id_client'].

si tu change ton code comme suit :
$id_client=$_SESSION['id_client'];
$test=$DB->exec("INSERT INTO commande(`id_client`,`id_status`) VALUES('".$id_client,2."')");
$comd=$DB->query("select id_comm from commande where id_client=' ".$id_client."' AND ((CURRENT_TIMESTAMP - date_cmd)<1000)");
je suis sûr que tes erreurs disparaitront.