我正在尝试插入到我的数据库表中。
我从列中得到这个错误:
Column 'allow_edit_time_due' cannot be null
字符串
但是,该列被设置为默认值:'0'
如果'allow_edit_time_due'为null,我如何插入到我的表中,使该值为默认值?
查询:
$sql = "INSERT INTO `cal_tasks` (user_id, task, task_notes, task_type, allow_edit_time_due, task_time_due, user_created) VALUES (" . $this->db->escape($user_id) . ", " . $this->db->escape($data['task']) . ", " . @$this->db->escape($data['task_notes']) . ", " . @$this->db->escape($data['task_type']) . ", " . @$this->db->escape($data['allow_edit_time_due']) . ", " . $this->db->escape($data['task_time_due']) . ", " . @$this->db->escape($data['user_created']) . ")";
型
2条答案
按热度按时间mwecs4sa1#
正如您所发现的,将NULL值传递给SQL将尝试用NULL值填充列,这将导致错误。
无论如何,使用活动记录将有助于简化关于这个问题的代码(如果更可取的话)。所有值也将自动转义。
这是一个例子:
字符串
tct7dpnv2#
在我们的一个项目中,我们决定将一个相当大的Firebird数据库迁移到Postgres(遇到了几个龙!)。Firebird允许自动生成的主键和列上的空值,但PSQL不允许。
我们有许多执行插入和更新查询的模型方法,这些方法接收填充的有效负载对象。我们需要一个批量解决方案来在执行查询之前清理有效负载。出于明显的原因,我们不想破解任何驱动程序或核心文件。
我们目前使用的解决方案是将查找数组设置为config item。关联数组的关联数组具有保存表名的第一级键,然后第二级键是不接受
NULL
且具有DEFAULT
或GENERATED
值的列的名称。第二级值未使用,但为了向开发人员提供清晰度,我们声明了默认值。字符串
我们的MY_Model方法/签名类似于:
型
如果payload中的任何列持有NULL值并且在查找数组中找到,则在返回对象之前将其从对象中取消设置。我们所有的其他模型都是从该模型扩展的,因此可以访问。
如果您想在以编程方式为不可空列创建嵌套查找数组方面有一个良好的开端,您可以使用以下方法,但我没有将自动生成的主键完全烘焙到PSQL查询中。
型
然后json解码jsonb结果并将其粘贴到
$config
声明中。