[英]Why inserting only one column to mysql database not show an error in codeigniter?
更新:
因為已經給出了答案,所以我使用全新安裝的 CodeIgniter 3.1.11 進行了測試。
並創建一個新的數據庫和表,包含 3 列:id、name、email。
然后,我嘗試使用 mysql cli 插入數據:
INSERT INTO users (name) VALUES ('hikki bocchi')
--- result ---
ERROR 1364 (HY000): Field 'email' doesn't have a default value
然后,我嘗試使用 CodeIgniter:
--- first code ---
$query = "INSERT INTO users (name) VALUES ('hikki bocchi')";
$this->db->query($query);
--- second code ---
$this->db->insert('users', ['name' => 'hikki bocchi']);
使用第一個代碼或第二個代碼的結果是相同的:
插入數據庫的數據名稱 = 'hikki bocchi' 和 email = ''(空白)。
這是 CodeIgniter 上的錯誤嗎? 還是這只發生在我身上?
老的:
首先,我是 CodeIgniter 和數據庫的新手,所以我想得到易於理解的答案。 我使用 CodeIgniter 和 MySQL,並使用 Adminer 設置數據庫。
我創建了 8 列:id、name、email、password、role_id、is_active、date_created 和 date_modified。
然后我嘗試使用 codeigniter 僅插入 1 列(名稱),它沒有顯示錯誤。
$this->db->insert('users', ['name' => 'Hikki Bocchi']);
我的邏輯是,列 id、date_created、date_modified 的值會自動創建,但列名、email、password、role_id、is_active 不是。
但是為什么數據只能插入一列呢? 這不應該是一個錯誤嗎? 名稱值已插入,其他列值為空白或 0。
我的問題是為什么會發生這種情況? 它不能顯示錯誤嗎?
MySQL 有默認值。 當您使用 codeignier 時,它會將該插入語句重寫為類似於:
INSERT INTO `users` (name) VALUES ('Hikki Bocchi');
從那時起,完全取決於您的數據庫來確定默認值是什么。 利用:
SHOW CREATE TABLE `users`;
查看您當前的默認值是什么。 您可以編輯架構,並更改默認值。
為了防止在某些列中插入空白值,您需要將它們聲明為not null
,並確保它們沒有設置默認值。
以下命令可用於應用這些設置(如果有默認值,這將刪除默認值,並使列不可為空):
alter table users modify email varchar(255) not null;
-- create a table with default values
create table users (
id int not null primary key auto_increment,
name varchar(255) default '',
email varchar(255) default ''
);
-- "partial" insert is allowed
insert into users(name) values('foo');
-- apply new setting on column email
alter table users modify email varchar(255) not null;
-- "partial" insert is not allowed anymore
insert into users(name) values('bar')
-- error: Field 'email' doesn't have a default value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.