是否可以使用bindValue()
插入MySQL函数?我的下面的代码只是输出为字符串'NOW()'
而不是函数NOW()
(没有引号)。
$sthandler->bindValue(1, 'NOW()');
答案 0 :(得分:10)
没有。查询参数仅替换单个常量值。例如,数字常量或文字字符串或日期。
其他任何内容 - 列名,表名,SQL关键字,函数,表达式 - 必须在解析时出现在SQL字符串中。
重新评论:
您应该了解参数不只是方便将额外的字符串插入到SQL中。 PREPARE类似于Java或C#的编译阶段,而EXECUTE类似于运行编译代码。
准备时间是指RDBMS进行语法检查以及引用验证的时间。如果命名一个不存在的表,或者调用一个不存在的函数,它必须给出错误。
您不能将表名或函数调用作为参数传递,因为RDBMS将无法在准备时验证这些引用。您不应该使用查询参数来更改语句的语法,或者引入无效的表或函数。
因此参数占位符必须是不可简化的语法元素,它永远不是无效引用,即单个文字值 - 数字或字符串。
答案 1 :(得分:7)
不,因为预处理语句中的占位符会自动转义。因此,在您的情况下,它将看到它是一个字符串并且(至少)将其放在引号'NOW()'
中。现在它只是mysql for mysql的一个字符串。您可以使用PHP
$sthandler->bindValue(1, date('c'));