我在将数据设置为NULL的更新列时遇到问题,我有一个表
user
,每一列都是id_parent
列,用户可以删除父级并可以添加父级,所以如果user
有一个parent
, id_parent
将与用户的 parent id
一起设置,但用户可以删除父级的数据,因此如果 user
删除父级的数据, id_parent
列将设置为 NULL。那么如何在数据库中将数据设置为空不是" "
而是NULL
。
这是我的user
桌子。
user
id_user | name | address | id_parent
用它来设置空列。它会起作用,不要忘记在活动记录上的第三个参数 SET 上添加 false
$this->db->set('id_parent', 'NULL', false);
您可以在“模型”中尝试此代码,希望它能起作用:
public function update_std_marks($id_user) {
$this->db->set('id_parent', null);
$this->db->where('id_user', $id_user);
$this->db->update('user');
}
我很好奇,所以我想看看 CodeIgniter 的 Active Record 在处理空值时如何处理不同的语法变化。 我将为
where()
和 set()
方法调用绘制几个测试用例。 下面的示例按照呈现正确 SQL 的能力排序,然后是正确引用的标识符,最后是语法简洁性。
where()
电池测试:
|品质 |语法 | SQL | | ---| ---| --- | | ⭐ |
->where('col')
| `col|IS NULL</pre> | | ✅ |
->where('col', null)| <pre>\
colIS NULL</pre> | | ✅ |
->where('col IS NULL')| <pre>\
colIS NULL</pre> | | ✅ |
->where(['col' => null])| <pre>\
colIS NULL</pre> | | ✅ |
->where ('col IS NULL', null)| <pre>\
colIS NULL</pre> | | ⚠️ |
->where('col', null, false)| <pre>col IS NULL</pre> | | ⚠️ |
->where('col IS NULL', null, false)| <pre>col IS NULL</pre> | | ⚠️ |
->where(['col' => null], null, false)| <pre>col IS NULL</pre> | | ❌ |
->where('col', 'NULL', false)| <pre>col = NULL</pre> | | ❌ |
->where('col', 'IS NULL', false)| <pre>col = IS NULL</pre> | | ❌ |
->where('col', 'NULL' )| <pre>\
col= 'NULL'</pre> | | ❌ |
->where('col', 'IS NULL')| <pre>\
col` = 'IS NULL'
set()
电池测试:
|品质 |语法 | SQL | | ---| --- | --- | | ⭐ |
->set('col', null)
| `col| | ❌ |= NULL</pre> | | ✅ |
->set(['col' => null])| <pre>\
col= NULL</pre> | | ⚠️ |
->set('col', 'NULL', false)| <pre>col = NULL</pre> | | ❌ |
->set('col')| <pre>\
col= ''</pre> | | ❌ |
->set ('col = NULL')| <pre>\
col =NULL
= ''</pre> | | ❌ |
->set('col = NULL', null)| <pre>\
col =NULL
= NULL</pre> | | ❌ |
->set('col = NULL', null, false)| <pre>col = NULL = </pre> | | ❌ |
->set( 'col', '= NULL')| <pre>\
col= '= NULL'</pre> | | ❌ |
->set('col', '= NULL', false)| <pre>col = = NULL</pre> | | ❌ |
->set('col', 'NULL')| <pre>\
col= 'NULL'</pre> | | ❌ |
->set('col' , null, false)| <pre>\
col =
->set(['col' => null], null, false)
| `col =|
您的用户表的
id_parent
字段中的属性必须设置为 is_null。否则你不能。
查询应该类似于
Update table user set id_parent = null where id_user = X
您可以使用此查询将该列设置为可为空:
ALTER TABLE user MODIFY id_parent int(11) null;
在 codeigniter 上试试这个:
$fields = array(
'id_parent' => array(
'name' => 'id_parent',
'type' => 'INT',
),
);
$this->dbforge->modify_column('user', $fields);
或者简单地说:
$this->db->query('ALTER TABLE user MODIFY id_parent int(11) null;');