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

enc*_*nce 8 php mysql pdo

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

$sthandler->bindValue(1, 'NOW()');
Run Code Online (Sandbox Code Playgroud)

Bil*_*win 10

不可以.查询参数仅替换单个常量值.例如,数字常量或文字字符串或日期.

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


你的评论:

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

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

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

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


Kin*_*nch 7

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

$sthandler->bindValue(1, date('c'));
Run Code Online (Sandbox Code Playgroud)