2014-02-06 5 views
0

Я создаю таблицу в php, как это, с помощью метода createTableUsers().Вставить значение по умолчанию

function createTableUsers() { 
     $db = Database::getInstance(); 
     $query = "CREATE TABLE IF NOT EXISTS users (
        id INTEGER AUTO_INCREMENT NOT NULL, 
        username VARCHAR(50) NOT NULL UNIQUE KEY, 
        password VARCHAR(100) NOT NULL, 
        email VARCHAR(50) NOT NULL, 
        first_name VARCHAR(50) NOT NULL default 'default_text', 
        last_name VARCHAR(50) NOT NULL default 'default_text' 
        PRIMARY KEY(id) 
       );";  
     $stmt = $db->prepare($query); 
     $stmt->execute(); 
    } 

Когда я ввожу новый пользователь сделать:

$db = Database::getInstance();    
    $username = "John"; 
    $email = "[email protected]"; 
    $password = "john"; 
    $this->user = new User(); 
    $this->user->setUsername($username); 
    $this->user->setEmail($email); 
    $this->user->setPassword($password); 
    $this->user->save(); 

Поэтому я использую методы класса User:

class User { 

    private $id = null; 
    private $username = null; 
    private $password = null; 
    private $email = null; 
    private $first_name = null; 
    private $last_name = null; 

    //GET & SET methods... 


    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; 
    } 

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

Однако, когда я ввожу новый пользователь, например, в разделе регистрации я не знаю всех полей, но только некоторые из них (имя пользователя, пароль и адрес электронной почты). То, что я хочу, это кортеж типа: John | john | [email protected] | default_value | значение по умолчанию.

Вместо этого вставляется кортеж John | john | [email protected] | NULL | NULL.

Я пробовал оба помещать одинарные кавычки ', либо помещая `. Но это то же самое, всегда вставляет NULL.

Как вы вводите значение по умолчанию вместо NULL? У меня синтаксис не так? Спасибо

+0

в вашем заявлении о создании вы указали столбец таблицы 'NOT NULL', поэтому вы не можете вставить NULL, я бы избегал этого дизайна, изменял таблицу, чтобы разрешить« NULL », а затем заполнять правильные данные вместо того, чтобы размещать случайные вещи там. –

+0

@SaUce Спасибо, все работает! – user3207923

ответ

1

Вы не используете значения по умолчанию, если вы установите их из PHP, а переменные инициализируются с помощью PHP null (который переведен в SQL-код NULL). Используйте это:

$sql = "INSERT INTO `users` (`username`, `password`, `email`) " 
    . "VALUES (?, ?, ?)"; 

Не устанавливайте другие значения вообще.

Смежные вопросы