簡體   English   中英

為什么在 mysql 數據庫中只插入一列不會在 codeigniter 中顯示錯誤?

[英]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;

DB Fiddle 上的演示

-- 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM