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