ホームページ >データベース >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 を参照で渡すことはできません」エラーを解決する

コード スニペットで、「パラメーター 2 を参照で渡すことはできません」というエラーが発生します。定数値を指定してbindParamを使用しようとするときは、パラメータ2を参照で渡します(例: PDO::PARAM_NULL)。このエラーは、定数値を渡すときに、bindParam にバインド先の変数が必要なために発生します。

この問題を解決するには、bindParam の代わりに bindingValue を使用する必要があります。 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

注: bindingValue(':param', null, PDO::PARAM_NULL) を使用したくなるかもしれませんが、このアプローチは常に機能するとは限りません。 。代わりに、この例では PDO::PARAM_INT などの明示的な型を使用することをお勧めします。

以上が定数を使用すると `bindParam` が失敗するのはなぜですか? 代わりに `bindValue` を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。