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

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

即要么这个:

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

或者这个:

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

似乎有效。

这是PDOStatement::bindParam()的文档

参数

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

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

【问题讨论】:

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

标签: php 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 语句中保留 :。
猜你喜欢
  • 2010-09-23
  • 2015-01-08
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 2014-12-10
  • 1970-01-01
相关资源
最近更新 更多