INSERT e UPDATE non funzionano

stefano862

Nuovo Utente
5 Dic 2013
26
0
0
Ciao, ho dei problemi nel mio codice ad interagire con in database. Le tabelle vengono create correttamente, le SELECT funzionano ma le INSERT e gli UPDATE no e non ne capisco il motivo.

In un file Database.php faccio:
PHP:
class Database {
   private static $instance = null;
   private static $dsn = "mysql:host=localhost;dbname=example"; 
   private static $username = 'root';
   private static $password = 'example';
   
   private $connection = null;
   
   private function __construct() {
      $this->connection = new PDO(static::$dsn, static::$username, static::$password);
   }
   
   public static function getInstance() {
      if(!static::$instance) {
         static::$instance = new Database();
      }
      return static::$instance;
   }
   
   public static function configConnection($dsn, $username, $password) {
      if(static::$instance) {
         throw new Exception("Connessione già stabilita.");
      }
      static::$dsn = $dsn;
      static::$username = $username;
      static::$password = $password;
   }
   
   public function connection() {
      return $this->connection;
   }
   
   public function exec($statement) {
      if($this->connection->exec($statement) === false) {
         throw new Exception("Database exec fallita.");
      }
   }
   
   public function prepare($statement) {
      $prepared = $this->connection->prepare($statement);
      $prepared->setFetchMode(PDO::FETCH_ASSOC);
      return $prepared;
   }
   
   public function lastInsertedId() {
      return $this->connection->lastInsertId();
   }
}

Per creare le varie tabelle faccio in questo modo:
PHP:
$db = Database::getInstance();
$query = "CREATE TABLE IF NOT EXISTS ex1 (
            id INTEGER(4) NOT NULL,
            ... ecc ...
            PRIMARY KEY(id)
         );"; 
$stmt = $db->prepare($query);
$stmt->execute();

Poi, per esempio, ho una classe User.php che implementa il metodo findUser($username) fatto così:
PHP:
public function findUser($username) {
   $db = Database::getInstance();
   $stmt = $db->prepare("SELECT * FROM `users` WHERE `username` = ?");
   $stmt->execute(array($username));
   $user = null;
   if($stmt->rowCount()) {
      $user = User::load($stmt->fetch());
   }
   return $user;
}
dove il metodo load(array $data) è:
PHP:
public static function load(array $data) {
   $u = new User();
   $u->id = $data['id'];
   $u->setUsername($data['username']);
   $u->password = $data['password'];
   $u->setEmail($data['email']);      
   $u->setFirstName($data['first_name']);
   $u->setLastName($data['last_name']);
   return $u;
}

i metodi get() e set() sono fatti in questo modo (sono tutti uguali quindi posto solo quello relativo al nome):
PHP:
public function getFirstName(){
   return $this->first_name;
}

public function setFirstName($firstName){
   $this->first_name = $firstName;
}

Quando devo inserire un nuovo utente nel database (cosa che non funziona) faccio in questo modo:
PHP:
public $user;
public $userRepository;

$this->userRepository = new UserRepository();
$db = Database::getInstance();

$this->user = new User();
$this->user->setUsername($username);
$this->user->setEmail($email);
$this->user->setPassword($password);
$this->user->save();

Dove save() si trova in User.php ed è:
PHP:
public function save() {
   $new = is_null($this->id);
   
   $db = Database::getInstance();
   
   if($new) {
      $sql = "INSERT INTO 'users' ('username', 'password', 'email', 'first_name', 'last_name') "
         . "VALUES (?, ?, ?, ?, ?)";
      $stmt = $db->prepare($sql);
      $stmt->execute(array($this->getUsername(), $this->password, $this->getEmail(), $this->getFirstName(), $this->getLastName()));
      $this->id = $db->lastInsertedId();
   }
   else {
      $sql = "UPDATE 'users' SET 'username' = ?, 'password' = ?, 'email' = ?, 'first_name' = ?, 'last_name' = ? WHERE 'id' = ?";
      $stmt = $db->prepare($sql);
      $stmt->execute(array($this->getUsername(), $this->password, $this->getEmail(), $this->getFirstName(), $this->getLastName(), $this->id));
   }
}

Quando invece faccio una modifica (anche questo non va) ad un utente presente nel database faccio così:
PHP:
public $user;
public $userRepository;
$this->userRepository = new UserRepository();
$this->user = $this->userRepository->findByUsername($username);
$db = Database::getInstance();
$this->user->setFirstName($first_name); 
$this->user->save();

Come mai queste due operazioni (INSERT e UPDATE) non vanno?
Grazie
 
Risolto, era un errore stupidissimo. Nelle query di INSERT e UPDATE usavo le virgolette singole normali (') e non queste `... :D
 

Discussioni simili