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

2022-08-30 14:38:23

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

即:

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

或者这个:

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

似乎有效。

以下是 PDOStatement 的文档::bindParam()

参数

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

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


答案 1

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

但是,它确实碰巧工作(至少在PHP 5.3.24中) - 如果缺少,则会在内部将冒号添加到参数中(请参阅PHP 5.3.24源代码中的ext/pdo/pdo_stmt.c:363)。


答案 2

推荐