在我的脑海里,下面的脚本应该工作:为什么不能将MYSQL函数传递到准备好的PDO语句中?
$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(), INTERVAL 1 MONTH))';
$ var ='LAST_DAY(CURDATE())';
...等等...
准备的语句变成:
$stmt->execute(array(1, $var));
我知道这将返回相同的结果NULL,但我担心如果我简单地改变sql语句:
UPDATE表SET状态=, DATE_MODIFIED = $ VAR
? 10
我打开自己注射?
准备的语句用于命令和数据的**分离**。而且你不能撤消这种分离,并将数据解释为SQL语句。 – mario 2010-11-23 18:31:38