MySQL BIT(1) フィールドに 0 を挿入すると 1 になる: 問題と解決策
PDO プリペアド ステートメントを使用する MySQL の BIT(1) フィールドでは、予期せず値 1 がテーブルに書き込まれます。この現象は、さまざまな形式のパラメーター バインディングや生の SQL を使用しているにもかかわらず発生しますが、値 0 を挿入する場合にのみ発生します。
0 の挿入でプレースホルダーが失敗する理由
BIT 列MySQL の はバイナリ型であるため、PDO などのクライアント ライブラリとの互換性の問題が発生する可能性があります。この問題は次の理由で発生します。
解決策: 代わりに TINYINT(1) を使用してください
この問題を解決するには、次のように変更することをお勧めします。 BIT(1) から TINYINT(1) までの列タイプ。これにより、挿入された値に関係なく、各行に 1 バイトが確実に割り当てられます。 TINYINT(1) はブール値の格納にも使用でき、BIT 列との互換性の問題を排除できます。
たとえば、次のコードは正しく動作するはずです。
$pdo = new PDO("connection string etc") ; $statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ; $statement->execute(array("TEST",0)) ;
それでも必要な場合BIT(1) を使用するには、次の回避策を試すことができます:
$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) に切り替えることは、さまざまなデータ型間で一貫した動作を提供し、さまざまなクライアントとの互換性を確保するため、推奨される解決策です。ライブラリ。
以上がMySQL BIT(1) フィールドに 0 を挿入すると 1 になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。