传递给 PDOStatement::bindParam() 的参数名称的前导冒号是可选的吗?

Posted

技术标签:

【中文标题】传递给 PDOStatement::bindParam() 的参数名称的前导冒号是可选的吗?【英文标题】:Is the leading colon for parameter names passed to PDOStatement::bindParam() optional? 【发布时间】:2012-04-04 10:52:12 【问题描述】:

:name 形式的命名参数传递给PDOStatement::bindParam() 时,无论是否使用前导冒号似乎都有效。

即要么这个:

$statement->bindParam(':name', $var);

或者这个:

$statement->bindParam('name', $var);

似乎有效。

这是PDOStatement::bindParam()的文档

参数

参数标识符。对于使用命名的准备好的语句 占位符,这将是 :name 形式的参数名称。 使用问号占位符准备的语句,这将是 参数的 1 索引位置。

这是否意味着可以省略冒号?

【问题讨论】:

我会说 SQL 表达式中需要冒号,但当您使用 bindParam 命名(标识)名称时不需要。 PDO 函数在这里可能不那么严格,因为它可以定义自己的接口来命名参数。 【参考方案1】:

不,因为文档没有提到这一点,我认为可以安全地假设这种行为不受官方支持且不应依赖。

但是,它确实确实有效(至少在 php 5.3.24 中)- 如果参数丢失,内部会在参数中添加一个冒号 (see ext/pdo/pdo_stmt.c:363 in the PHP 5.3.24 source code)。

【讨论】:

我想知道同样的问题。我的猜测是 : 用于严格区分 colName 和 sql 关键字。很高兴知道 PDO 将修复绑定中缺失的 :。我会接受 hakre 的建议并在 sql 语句中保留 :。

以上是关于传递给 PDOStatement::bindParam() 的参数名称的前导冒号是可选的吗?的主要内容,如果未能解决你的问题,请参考以下文章

无法正确地将值从父母传递给孩子和孩子传递给父母

如何将对象数组作为道具传递给组件,然后将数组的成员作为道具传递给嵌套组件?

为啥将 ClientID 传递给 javascript 函数会传递整个控件?

将变量传递给 jQuery 插件参数

如何将环境变量传递给传递给xmllint的命令?

将 JSON 数据从 php 传递给 html-data 属性,然后传递给 Javascript