【发布时间】:2012-01-03 03:32:10
【问题描述】:
是否可以使用bindValue() 插入 MySQL 函数?我下面的代码只是输出为字符串'NOW()',而不是函数NOW()(不带引号)。
$sthandler->bindValue(1, 'NOW()');
【问题讨论】:
是否可以使用bindValue() 插入 MySQL 函数?我下面的代码只是输出为字符串'NOW()',而不是函数NOW()(不带引号)。
$sthandler->bindValue(1, 'NOW()');
【问题讨论】:
没有。查询参数仅替代单个常量值。例如,数字常量或文字字符串或日期。
其他任何东西——列名、表名、SQL 关键字、函数、表达式——在解析时都必须在 SQL 字符串中。
你的评论:
您应该明白,参数不只是为了方便将额外的字符串插入到您的 SQL 中。 PREPARE 类似于 Java 或 C# 的编译阶段,而 EXECUTE 类似于运行已编译的代码。
准备时间是 RDBMS 进行语法检查以及验证引用的时间。如果你命名一个不存在的表,或者调用一个不存在的函数,它一定会报错。
您不能将表名或函数调用作为参数传递,因为这样 RDBMS 将无法在准备时验证这些引用。您不应使用查询参数来更改语句的语法,或引入无效的表或函数。
所以参数占位符必须是不可约的句法元素,绝不是无效引用,即单个文字值——数字或字符串。
【讨论】:
eval() for MySql。
不,因为准备好的语句中的占位符会自动转义。因此,在您的情况下,它会看到它是一个字符串,并且(至少)将它放在引号'NOW()' 中。现在它也只是 mysql 的一个字符串。您可以使用 PHP 设置当前日期时间
$sthandler->bindValue(1, date('c'));
【讨论】: