Я создаю таблицу в 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? У меня синтаксис не так? Спасибо
в вашем заявлении о создании вы указали столбец таблицы 'NOT NULL', поэтому вы не можете вставить NULL, я бы избегал этого дизайна, изменял таблицу, чтобы разрешить« NULL », а затем заполнять правильные данные вместо того, чтобы размещать случайные вещи там. –
@SaUce Спасибо, все работает! – user3207923