首页 > 解决方案 > 为什么只向 mysql 数据库插入一列不会在 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' 和电子邮件 = ''(空白)。

这是 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。

空白值

我的问题是为什么会发生这种情况?它不能显示错误吗?

标签: phpmysqlcodeigniteradminer

解决方案


MySQL 有默认值。当您使用 codeignier 时,它会将该插入语句重写为类似于:

INSERT INTO `users` (name) VALUES ('Hikki Bocchi');

从那时起,完全取决于您的数据库来确定默认值是什么。利用:

SHOW CREATE TABLE `users`;

查看您当前的默认值是什么。您可以编辑架构,并更改默认值。


推荐阅读