2012-03-19 41 views
28

将形式为:name的命名参数传递给PDOStatement::bindParam()时,无论是否使用前导冒号,它都可以正常工作。传递给PDOStatement :: bindParam()的参数名称的前导冒号是否可选?

即无论是这样的:

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

或本:

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

似乎工作。

下面是PDOStatement::bindParam()

参数

参数标识的文档。对于使用名为 占位符的准备好的语句,这将是名称为的参数名称。对于使用问号占位符的 准备好的语句,这将是参数的1索引位置 。

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

+0

我想说冒号在SQL表达式中是需要的,但是当您用'bindParam'命名(识别)名称时不需要冒号。 PDO函数在这里可能不那么严格,因为它可以定义它自己的接口来命名参数。 – hakre 2012-07-01 11:01:50

回答

26

不,因为文档没有提到这一点,我认为可以安全地假设这种行为没有得到正式支持,也不应该依赖。但是,它确实发生了工作(至少在PHP 5.3.24中) - 在内部冒号会被添加到参数中(如果缺失的话)(see ext/pdo/pdo_stmt.c:363 in the PHP 5.3.24 source code)。

+0

我在想同一个问题。我的猜测是:用于严格区分colName和sql关键字。很高兴知道PDO将修复丢失:在绑定中。我会采取客户的建议,并保持:在SQL语句。 – CoR 2013-11-13 10:21:15

相关问题