Rumah > Artikel > pangkalan data > Mengapa PDO Memasukkan 1 Daripada 0 ke dalam Lajur BIT(1) dalam MySQL?
Anomali Sisipan Penyata PDO dengan Medan Bit(1)
Apabila memasukkan nilai ke dalam medan bit(1) menggunakan pernyataan yang disediakan PDO, hasil yang tidak dijangka berlaku. Daripada nilai 0 yang dimaksudkan, pangkalan data menyimpan 1 dalam jadual.
Anomali ini timbul disebabkan sifat binari lajur BIT dalam MySQL. Walaupun dikategorikan sebagai angka, ia dianggap sebagai jenis binari, yang membawa kepada isu keserasian dengan perpustakaan pelanggan tertentu.
Penyelesaian menggunakan TINYINT(1)
Untuk mengelakkan masalah ini , pertimbangkan untuk bertukar kepada lajur TINYINT(1). Jenis data alternatif ini menawarkan keperluan storan yang serupa kepada BIT(1) sambil menghapuskan isu keserasian dengan PDO dan perpustakaan pelanggan lain.
Menggunakan bindValue dengan PDO::PARAM_INT
Jika menukar jenis lajur tidak boleh dilaksanakan, penyelesaian alternatif melibatkan penggunaan bindValue dengan pembayang jenis PDO::PARAM_INT. Pendekatan ini memaksa PDO untuk menganggap nilai sebagai integer, menyelesaikan anomali sisipan.
Kod Contoh
<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>
Perhatikan bahawa sementara penyelesaian ini mungkin menyelesaikan isu sisipan , masih dinasihatkan untuk beralih kepada TINYINT(1) untuk keserasian yang dipertingkatkan dan potensi manfaat prestasi.
Atas ialah kandungan terperinci Mengapa PDO Memasukkan 1 Daripada 0 ke dalam Lajur BIT(1) dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!