PDO:将MySQL函数传递给bindValue / bindParam

时间:2012-01-02 18:24:37

标签: php mysql pdo

是否可以使用bindValue()插入MySQL函数?我的下面的代码只是输出为字符串'NOW()'而不是函数NOW()(没有引号)。

$sthandler->bindValue(1, 'NOW()');

2 个答案:

答案 0 :(得分:10)

没有。查询参数仅替换单个常量值。例如,数字常量或文字字符串或日期。

其他任何内容 - 列名,表名,SQL关键字,函数,表达式 - 必须在解析时出现在SQL字符串中。


重新评论:

您应该了解参数只是方便将额外的字符串插入到SQL中。 PREPARE类似于Java或C#的编译阶段,而EXECUTE类似于运行编译代码。

准备时间是指RDBMS进行语法检查以及引用验证的时间。如果命名一个不存在的表,或者调用一个不存在的函数,它必须给出错误。

您不能将表名或函数调用作为参数传递,因为RDBMS将无法在准备时验证这些引用。您不应该使用查询参数来更改语句的语法,或者引入无效的表或函数。

因此参数占位符必须是不可简化的语法元素,它永远不是无效引用,即单个文字值 - 数字或字符串。

答案 1 :(得分:7)

不,因为预处理语句中的占位符会自动转义。因此,在您的情况下,它将看到它是一个字符串并且(至少)将其放在引号'NOW()'中。现在它只是mysql for mysql的一个字符串。您可以使用PHP

设置当前日期时间
$sthandler->bindValue(1, date('c'));