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

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


即:这个:


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

或这个:


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

似乎工作。


这是文档 PDOStatement::bindParam()


参数


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


这是否意味着结肠可以被取消?


月关宝盒
浏览 496回答 3
3回答

慕标5832272

不,因为文档没有提到这一点,我认为可以安全地假设这种行为不是官方支持的,不应该依赖。但是,它实际上确实有效(至少在PHP 5.3.24中) - 如果缺少冒号,将在内部添加一个冒号(参见ext/pdo/pdo_stmt.c:363PHP 5.3.24源代码)。

富国沪深

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

qq_花开花谢_0

我想知道同样的问题。我的猜测是:用于严格区分colName和sql关键字。很高兴知道PDO将修复缺失:在绑定中。我将接受hakre的建议并保留:在sql语句中
打开App,查看更多内容
随时随地看视频慕课网APP