Partage
  • Partager sur Facebook
  • Partager sur Twitter

Class avec une méthode Update problème

UPDATE et INSERT utilise la même méthode Query et Bind

Sujet résolu
    28 juillet 2017 à 2:59:55

    Bonjour la communauté.

    La class avec UPDATE ne fonctionne pas mais INSERT oui. Tout deux utilise les même fonction BIND et QUERY dans ma classe.

    Qu'est-ce qui ne va pas avec ma requête plus bas? Comment je peux corriger?

    J'ai une classe que voici:

    class Database{
      private $host = "localhost";
      private $user = "asdf";
      private $pass = "asdf";
      private $dbname = "asdf";
    
      private $dbh;
      private $error;
      private $stmt;
    
      public function __construct(){
          $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
          $options = array(
              PDO::ATTR_PERSISTENT => true,
              PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
          );
          try{
              $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
          }
          catch(PDOException $e){
              $this->error = $e->getMessage();
          }
      }
    
    	public function query($query){
    			$this->stmt = $this->dbh->prepare($query);
    	}
    
    	public function bind($param, $value, $type = null){
    			if (is_null($type)) {
    					switch (true) {
    							case is_int($value):
    									$type = PDO::PARAM_INT;
    									break;
    							case is_bool($value):
    									$type = PDO::PARAM_BOOL;
    									break;
    							case is_null($value):
    									$type = PDO::PARAM_NULL;
    									break;
    							default:
    									$type = PDO::PARAM_STR;
    					}
    			}
    			$this->stmt->bindValue($param, $value, $type);
    	}
    
    	public function execute(){
    			return $this->stmt->execute();
    	}	
    
    	public function resultset(){
    			$this->execute();
    			return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
    	}
    
    	public function single(){
    			$this->execute();
    			return $this->stmt->fetch(PDO::FETCH_ASSOC);
    	}
    
    	public function rowCount(){
    			return $this->stmt->rowCount();
    	}
    
    	public function lastInsertId(){
    			return $this->dbh->lastInsertId();
    	}
    
    	public function beginTransaction(){
    			return $this->dbh->beginTransaction();
    	}
    
    	public function endTransaction(){
    			return $this->dbh->commit();
    	}
    
    	public function cancelTransaction(){
    			return $this->dbh->rollBack();
    	}
    
    	public function debugDumpParams(){
    			return $this->stmt->debugDumpParams();
    	}
    
    } // ending Class Database
    

    Et à l'utilisation pour faire un UPDATE:

    $database->query('UPDATE mytable SET FName=:fnname, LName=:lname WHERE ID = :Userid');
    $database->bind(':Userid', 12);
    $database->bind(':fname', 'Fastbit');
    $database->bind(':lname', 'Informatica');
    $database->execute();
    

    Mon erreur est le suivante:

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in /home/o/test.php:52 Stack trace: #0 /home/o/test.php(52): PDOStatement->execute() #1 /home/o/test.php(114): Database->execute() #2 {main} thrown in /home/o/test.php on line 52

    la ligne qui donne sur :

    	public function execute(){
    			return $this->stmt->execute();
    	}	

    Quand je fais un UPDATE mais pour un INSERT, ça marche super bien.

    Je ne vois pas le problème.



    • Partager sur Facebook
    • Partager sur Twitter

    Class avec une méthode Update problème

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown