Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Mengembalikan Semua Baris Apabila Mencari \'Field = 0\'?
Memahami Gelagat MySQL Tidak Dijangka: Mengapa 'mySQL mengembalikan semua baris apabila medan=0'
Dalam MySQL, apabila menanyakan jadual dengan syarat apabila medan sama dengan 0, anda mungkin menemui hasil yang tidak dijangka di mana semua baris dikembalikan dan bukannya tiada. Ini boleh menimbulkan kebimbangan tentang ketepatan dan keselamatan data.
Punca Isu
Tingkah laku ini berlaku kerana MySQL secara tersirat menukar medan berasaskan rentetan kepada integer apabila menilai perbandingan berangka. Apabila rentetan tidak boleh ditukar kepada integer, seperti "0" dalam kes anda, ia mengembalikan 0. Akibatnya, pertanyaan berkesan menjadi "WHERE email=0," yang sepadan dengan semua baris dengan alamat e-mel kosong atau bukan angka , walaupun tiada nilai '0' yang jelas dalam jadual.
Implikasi Keselamatan
Isu ini boleh mempunyai implikasi keselamatan yang serius, kerana penyerang boleh mengeksploitasinya untuk memintas pemeriksaan keselamatan. Dengan menetapkan medan angka dalam rekod sasaran kepada mana-mana nilai bukan angka, mereka pada dasarnya boleh membatalkan syarat dan mendapat akses kepada data yang tidak sepatutnya mereka miliki.
Mengelakkan Isu
Untuk mengelakkan isu ini, adalah penting untuk memastikan anda membandingkan medan rentetan dengan nilai rentetan dan medan berangka dengan nilai berangka. Dalam kes anda, pertanyaan hendaklah diubah suai kepada:
SELECT * FROM table WHERE email='0';
Dengan melampirkan '0' dalam petikan tunggal, anda menyatakan bahawa pertanyaan itu harus dianggap sebagai rentetan dan bukan integer.
Pertimbangan Tambahan
Atas ialah kandungan terperinci Mengapa MySQL Mengembalikan Semua Baris Apabila Mencari \'Field = 0\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!