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中文網其他相關文章!