ホームページ >データベース >mysql チュートリアル >PDO は、0 が与えられたときに bit(1) 列に 1 を挿入するのはなぜですか?

PDO は、0 が与えられたときに bit(1) 列に 1 を挿入するのはなぜですか?

DDD
DDDオリジナル
2024-11-02 17:31:03555ブラウズ

Why does PDO insert 1 into a bit(1) column when given 0?

PDO ステートメント挿入の難題: バイナリ フィールドの問題を理解する

データベース対話の世界では、PDO プリペアド ステートメントを利用して、データのセキュリティと効率。ただし、bit(1) のようなバイナリ フィールドに遭遇すると、不可解な問題が発生します。このようなフィールドに値 0 を挿入すると、多くの場合、テーブルに謎の 1 が表示されます。

この異常は、MySQL の bit(1) カラム タイプのバイナリの性質に起因します。数値型として分類されているにもかかわらず、実際にはバイナリ型として動作するため、PDO などのクライアント ライブラリとの互換性の問題が発生します。

この問題を回避するには、より信頼性の高いアプローチは、列の型を TINYINT( 1)。 BIT(1) と TINYINT(1) はどちらも行ごとに全バイトの記憶域スペースを消費しますが、後者はクライアント ライブラリとの互換性をよりスムーズにします。

さまざまな型ヒントや修飾子を試してみると、良い結果が得られる場合もあります。以下に示すように、TestBool パラメーターを PARAM_INT の型ヒントでバインドするように PDO コードを変更することを検討してください。

$pdo = new PDO("connection string etc");
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (:someText,:testBool)');
$statement->bindValue(':someText', "TEST");
$statement->bindValue(':testBool', 0, PDO::PARAM_INT);
$statement->execute();

これらのような回避策は一時的に問題を解決する可能性がありますが、TINYINT(1) に切り替えることは強力です。将来の互換性の問題を防ぐために推奨されます。

以上がPDO は、0 が与えられたときに bit(1) 列に 1 を挿入するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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