Pertanyaan Ambiguous: Memahami Mengapa MySQL Mengembalikan Semua Baris untuk "Field=0"
Dalam bidang pertanyaan MySQL, perbandingan yang kelihatan tidak berbahaya , seperti "SELECT * FROM table WHERE email=0," boleh menghasilkan hasil yang tidak dijangka. Daripada menapis untuk baris tertentu, seperti yang dimaksudkan, ia mengembalikan semua rekod daripada jadual, menimbulkan kebimbangan tentang keselamatan data dan integriti pertanyaan.
Untuk memahami tingkah laku yang membingungkan ini, kita mesti menyelidiki kehalusan jenis data. Apabila menanyakan medan yang mengandungi data bukan angka, seperti alamat e-mel dalam kes ini, MySQL cuba menukarnya kepada nilai berangka. Memandangkan "0" bukan e-mel yang sah, MySQL mentafsirkannya sebagai sifar berangka, dengan berkesan membatalkan syarat perbandingan.
Oleh itu, pertanyaan SELECT * FROM table WHERE email=0 pada dasarnya menjadi pertanyaan tanpa sebarang kriteria penapisan , mengakibatkan pengambilan semula semua baris. Ini boleh membawa implikasi yang serius terhadap keselamatan, kerana individu yang tidak dibenarkan mungkin boleh mengeksploitasi kelemahan ini untuk mengakses data sensitif.
Nasib baik, terdapat penyelesaian yang mudah untuk mengelakkan kekaburan ini. Dengan melampirkan nilai "0" dalam petikan tunggal, kami secara eksplisit menyatakan bahawa ia harus dianggap sebagai rentetan, memastikan perbandingan yang betul:
SELECT * FROM table WHERE email='0';
Dengan pengubahsuaian ini, MySQL akan membandingkan nilai dengan betul sebagai rentetan dan hanya mengembalikan baris dengan nilai e-mel "0."
Untuk mengelakkan percanggahan sedemikian pada masa hadapan, adalah penting untuk memberi perhatian yang teliti kepada jenis data yang terlibat dalam pertanyaan. Sentiasa sahkan bahawa medan rentetan dibandingkan dengan nilai rentetan dan medan berangka dengan nilai berangka. Langkah berjaga-jaga mudah ini akan melindungi daripada sebarang kejutan yang tidak diingini dan memastikan ketepatan interaksi pangkalan data anda.
Atas ialah kandungan terperinci Mengapa MySQL Mengembalikan Semua Baris Apabila Menyoal \'Field = 0\' untuk Data Bukan Berangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!