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 サイトの他の関連記事を参照してください。