首页 >数据库 >mysql教程 >为什么'bindParam”因常量而失败以及如何使用'bindValue”代替?

为什么'bindParam”因常量而失败以及如何使用'bindValue”代替?

Patricia Arquette
Patricia Arquette原创
2024-12-05 02:17:08844浏览

Why Does `bindParam` Fail with Constants and How Can I Use `bindValue` Instead?

解决使用带有常量的 bindParam 时出现的“无法通过引用传递参数 2”错误

在您的代码片段中,您遇到错误“Cannot当尝试使用带有常量值(例如,PDO::PARAM_NULL)的bindParam时,通过引用传递参数2”。出现此错误的原因是,当您传递常量值时,bindParam 需要绑定一个变量。

要解决此问题,您需要使用bindValue 而不是bindParam。 bindValue 将值直接绑定到参数,而不是变量。这是更正后的代码:

try {
    $dbh = new PDO('mysql:dbname=' . DB . ';host=' . HOST, USER, PASS);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
}
catch(PDOException $e)
{
    ...
}
$stmt = $dbh->prepare('INSERT INTO table(v1, v2, ...) VALUES(:v1, :v2, ...)');
$stmt->bindValue(':v1', null, PDO::PARAM_INT); // Using bindValue with null and explicit type

注意:您可能会想使用bindValue(':param', null, PDO::PARAM_NULL),但这种方法并不总是有效。相反,建议使用显式类型,例如本例中的 PDO::PARAM_INT。

以上是为什么'bindParam”因常量而失败以及如何使用'bindValue”代替?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn