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

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

$sthandler->bindValue(1, 'NOW()');
最佳答案
不可以.查询参数仅替换单个常量值.例如,数字常量或文字字符串或日期.

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

你的评论:

您应该了解参数不仅仅是在SQL中插入额外字符串的便利. PREPARE类似于Java或C#的编译阶段,而EXECUTE类似于运行编译代码.

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

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

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

转载注明原文:php – PDO:将MySQL函数传递给bindValue/bindParam - 代码日志