在 PDOStatement::bindParam() 中省略带有命名参数的前导冒号
在 PDOStatement::bindParam() 中,似乎传递不带前导冒号的命名参数(例如“:name”)与包含冒号(例如“name”)等效。鉴于文档指出“参数标识符”应包含命名占位符的前导冒号,这种行为可能看起来令人费解。
官方支持
PDOStatement:: bindParam() 文档没有明确声明前导冒号对于命名参数是可选的。因此,谨慎的假设是这种行为不受官方支持,并且不应在生产代码中使用。
底层机制
尽管缺乏官方文档,由于内部机制,前导冒号的省略似乎在 PHP 版本(例如 5.3.24)中起作用。具体来说,如果缺少冒号,则会在执行 PDOStatement::bindParam() 期间自动将其添加到参数中。此内部修复可以在 PDO 源代码 (ext/pdo/pdo_stmt.c) 中观察到。
建议
虽然可以省略前导冒号在当前 PHP 版本中的命名参数中,不推荐这样做。缺乏官方支持意味着未来的 PHP 版本可能不会维护此行为,从而导致潜在的错误。因此,在将命名参数传递给 PDOStatement::bindParam() 时,最好始终包含前导冒号,以获得最大的兼容性和可靠性。
以上是省略 PDOStatement::bindParam() 命名参数中的前导冒号是受支持的行为吗?的详细内容。更多信息请关注PHP中文网其他相关文章!