将 NOW() 插入到具有 CodeIgniter 活动记录的数据库中

2022-08-30 08:15:50

我想在Codeigniter的活动记录中使用mySQL函数NOW()在数据库中插入当前时间。以下查询将不起作用:

$data = array(
        'name' => $name ,
        'email' => $email,
        'time' => NOW()
        );
        $this->db->insert('mytable', $data);

这是因为 CodeIgniter 的 ActiveRecord 类会自动转义输入。

下面通过调用 set() 并传递 peratmeter FALSE,使其不会转义 NOW() 来正常工作。

$data = array(
        'name' => $name ,
        'email' => $email,
        );
        $this->db->set('time', 'NOW()', FALSE);
        $this->db->insert('mytable', $data);

但是,我的问题是,除了这个,还有其他方法吗?例如,如果我可以通过仅添加数据数组中的所有内容来以某种方式使用?例如,类似下面的内容:

$data = array(
            'name' => $name ,
            'email' => $email,
            'time' => NOW(), FALSE
            );

答案 1

我通常使用触发器来处理时间戳,但我认为这可能有效。

$data = array(
    'name' => $name,
    'email' => $email
);

$this->db->set('time', 'NOW()', FALSE);
$this->db->insert('mytable', $data);

答案 2

除非我大错特错,否则答案是,“不,没有办法。

在这种情况下,基本问题是您正在调用MySQL函数并且实际上并没有设置值。CI 转义值,以便您可以执行干净的插入,但它不会测试这些值是否碰巧正在调用 、 或 (在本例中)等函数。虽然在大多数情况下这很棒,但对于这些情况,原始sql是唯一的追索权。aes_encryptmd5now()

另一方面,应该作为MySQL的PHP版本。(它不适用于所有版本的SQL)。date('Y-m-d');NOW()


推荐