2014-02-06 53 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 (?, ?, ?)"; 

不要设置其他值。