2014-02-06 55 views
0

我通過createTableUsers()方法在php中創建一個表。插入默認值

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 |約翰| [email protected] | default_value |默認值。

相反,插入的元組是John |約翰| [email protected] | NULL | NULL

我試過把單引號',要麼放`。但它是一樣的,總是插入NULL。

你怎麼輸入一個默認值而不是NULL?我有語法錯誤?謝謝

+0

在你的create語句中你指定的表列爲'NOT NULL',因此你不能插入NULL,我會避免這種設計,修改表以允許'NULL'並且以後填充正確的數據而不是放置隨機的東西在那裏。 – 2014-02-06 20:15:21

+0

@SaUce謝謝,它的作品! – user3207923

回答

1

如果您從PHP中設置它們,並且使用PHP的null(將其轉換爲SQL的NULL)初始化變量,則不會利用默認值。使用這個:

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

不要設置其他值。