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

Joh*_*ter 30 php pdo

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

即:这个:

$statement->bindParam(':name', $var);
Run Code Online (Sandbox Code Playgroud)

或这个:

$statement->bindParam('name', $var);
Run Code Online (Sandbox Code Playgroud)

似乎工作.

这是文档 PDOStatement::bindParam()

参数

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

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

Joh*_*ter 29

不,因为文档没有提到这一点,我认为可以安全地假设这种行为不是官方支持的,不应该依赖.

但是,它实际上确实有效(至少在PHP 5.3.24中) - 如果缺少冒号,则会在内部添加一个冒号(参见ext/pdo/pdo_stmt.c:363PHP 5.3.24源代码).