首頁  >  文章  >  資料庫  >  為什麼 PDO 在 MySQL 的 BIT(1) 欄位中插入 1 而不是 0?

為什麼 PDO 在 MySQL 的 BIT(1) 欄位中插入 1 而不是 0?

Patricia Arquette
Patricia Arquette原創
2024-11-04 11:46:41936瀏覽

Why Does PDO Insert 1 Instead of 0 into a BIT(1) Column in MySQL?

Bit(1) 欄位的PDO 語句插入異常

使用PDO 準備好的語句將值插入到bit(1) 欄位時,出現意想不到的結果。資料庫在表中儲存的不是預期的 0 值,而是 1。

這種異常是由於 MySQL 中 BIT 列的二進位性質而產生的。儘管被歸類為數字,但它們被視為二進制類型,導致與某些客戶端庫存在相容性問題。

使用 TINYINT(1) 的解

避免此問題,請考慮切換到 TINYINT(1) 欄位。這種替代資料類型提供與 BIT(1) 類似的儲存要求,同時消除了與 PDO 和其他客戶端程式庫的相容性問題。

將 bindValue 與 PDO::PARAM_INT 結合使用

如果更改列類型不可行,則替代解決方案涉及使用帶有 PDO::PARAM_INT 類型提示的 bindValue。此方法強制 PDO 將值視為整數,從而解決插入異常問題。

範例程式碼

<code class="php">$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();</code>

請注意,雖然此解決方法可能會解決插入問題,但仍建議過渡到TINYINT(1) 以增強相容性和潛在的性能優勢。

以上是為什麼 PDO 在 MySQL 的 BIT(1) 欄位中插入 1 而不是 0?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn