在我看来,以下脚本应该有效:
$stmt = $db->prepare("UPDATE table SET status = ?, date_modified = ?");
$stmt->execute(array(1, 'NOW()'));
但是当将 NOW()
传递到准备好的语句中时,什么也没有发生。将 NOW()
替换为实际日期(即 2010-11-23)就可以了。
我无法在网上找到解释。有什么想法吗?
编辑
只是为了进一步澄清和消除问题中的任何混淆,我实际上想将一个变量传递到准备好的语句中,但是,该变量将设置为 mysql 的五个可能的日期/时间函数之一。
例如
$var = 'NOW()';
$var = 'LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 1 MONTH))';
$var = 'LAST_DAY(CURDATE())';
...等等...
准备好的语句变成:
$stmt->execute(array(1, $var));
我知道这将返回相同的 NULL 结果,但我担心如果我只是将 sql 语句更改为:
UPDATE table SET status = ?, date_modified = $var
我要打开自己接受注入(inject)?
最佳答案
您不需要将 NOW()
作为参数传递,因为不需要对其进行任何处理,因为它是一个内置的 SQL 函数,因此只需将其包含在实际的查询如下。
$stmt = $db->prepare("UPDATE table SET status = ?, date_modified = NOW()");
或者,您可以将 date_modified
设置为 TIMESTAMP 字段,它会在 SQL 更新时自动更新 date_modified
字段。
关于php - 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4259274/