传递给 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() 的参数名称的前导冒号是可选的吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何将对象数组作为道具传递给组件,然后将数组的成员作为道具传递给嵌套组件?