php - 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?

标签 php mysql pdo prepared-statement

在我看来,以下脚本应该有效:

$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/

相关文章:

php - pdo lastInsertId() 一直返回 0

php - 在ajax内部调用ajax

Mysql,每N行删除几行

php - 如何使用 PHP/MYSQL 在评论中最好地创建中断?

javascript - WordPress 不排队脚本

php - PHP 变量是按值传递还是按引用传递?

Mysql CREATE 语句真的很慢(Mac OS X/Macport 安装)

php - CodeIgniter 插入了两次相同的条目。在某些情况下

php - sql case 查询时参数编号无效错误

php - SQLSTATE[HY093] : Invalid parameter number: parameter was not defined - using greater than operator in SQL