【发布时间】:2011-05-14 15:25:05
【问题描述】:
在我看来,以下脚本应该可以工作:
$stmt = $db->prepare("UPDATE table SET status = ?, date_modified = ?");
$stmt->execute(array(1, 'NOW()'));
但是当将NOW() 传递到准备好的语句中时,什么也没有发生。用实际日期(即 2010-11-23)替换 NOW() 就可以了。
我无法在网上找到解释。有什么想法吗?
编辑
为了进一步澄清和消除问题中的任何混淆,我想将一个变量实际传递到准备好的语句中,但是,该变量将设置为 mysql 的五个可能的日期/时间函数之一。
例如
$var = 'NOW()';
$var = 'LAST_DAY(DATE_ADD(CURDATE(), 间隔 1 个月))';
$var = 'LAST_DAY(CURDATE())';
...等等...
准备好的语句变成:
$stmt->execute(array(1, $var));
我知道这将返回相同的 NULL 结果,但我担心如果我只是将 sql 语句更改为:
UPDATE 表 SET 状态 = ?, date_modified = $var
我打开自己注射?
【问题讨论】:
-
预处理语句用于命令和数据的分离。而且您无法撤消这种分离并将数据解释为 SQL 语句。
标签: php mysql pdo prepared-statement