Rumah  >  Artikel  >  pangkalan data  >  Mengapa Memasukkan 0 ke dalam Medan BIT(1) dalam MySQL menggunakan PDO Menghasilkan 1?

Mengapa Memasukkan 0 ke dalam Medan BIT(1) dalam MySQL menggunakan PDO Menghasilkan 1?

Susan Sarandon
Susan Sarandonasal
2024-11-02 12:55:30329semak imbas

Why Does Inserting 0 into a BIT(1) Field in MySQL using PDO Result in 1?

Memahami Isu Sisipan Nilai dalam Medan Bit(1)

Pengaturcaraan pangkalan data menggunakan sambungan PDO PHP boleh memberikan cabaran semasa mengendalikan manipulasi data, terutamanya dengan jenis data binari seperti bit(1). Artikel ini meneroka isu biasa yang dihadapi apabila memasukkan nilai 0 ke dalam medan bit(1), menghasilkan nilai yang tidak dijangka dalam pangkalan data.

Pernyataan Masalah

Memasukkan nilai 0 ke dalam medan bit(1) menggunakan penyata yang disediakan PDO menghasilkan nilai tersimpan 1. Percanggahan ini berlaku apabila menggunakan kaedah pemegang tempat (?), pemegang tempat dinamakan (:tempat letak), bindValue(), dan bindParam(). Menyoal pangkalan data secara terus menggunakan pernyataan SQL tanpa ruang letak memasukkan nilai 0 yang betul.

Penyelesaian

Penyelesaian yang disyorkan ialah mengubah suai jenis medan daripada bit(1) kepada TINYINT(1). Jenis data BIT boleh menyebabkan isu keserasian dengan perpustakaan pelanggan, termasuk PDO. Adalah penting untuk menggunakan TINYINT(1) dan bukannya BIT(1) untuk menyimpan nilai boolean bagi mengelakkan masalah sedemikian.

Penyelesaian Alternatif untuk BIT(1)

Jika berubah jenis medan tidak boleh dilaksanakan, menggunakan kaedah bindValue() dengan pembayang jenis PDO::PARAM_INT boleh menyelesaikan isu tersebut. Coretan kod berikut menunjukkan perkara ini:

<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>

Takeaway

Menggunakan TINYINT(1) ialah kaedah pilihan untuk menyimpan nilai boolean dalam pangkalan data MySQL. Walau bagaimanapun, jika BIT(1) mesti digunakan, kaedah bindValue() dengan pembayang jenis PDO::PARAM_INT boleh menyelesaikan isu memasukkan 0 nilai. Adalah penting untuk ambil perhatian bahawa jenis data BIT boleh menyebabkan ketidakserasian dengan perpustakaan pelanggan tertentu dan harus digunakan dengan berhati-hati.

Atas ialah kandungan terperinci Mengapa Memasukkan 0 ke dalam Medan BIT(1) dalam MySQL menggunakan PDO Menghasilkan 1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn