Rumah  >  Artikel  >  pangkalan data  >  Mengapa MySQL Mengembalikan Semua Baris Apabila Mencari \'Field = 0\'?

Mengapa MySQL Mengembalikan Semua Baris Apabila Mencari \'Field = 0\'?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-24 08:49:01203semak imbas

Why Does MySQL Return All Rows When Searching for '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

  • Sentiasa gunakan jenis data yang sesuai untuk lajur anda untuk mengelakkan penukaran yang tidak dijangka.
  • Apabila membandingkan rentetan, pertimbangkan untuk menggunakan operator 'LIKE' dan bukannya ' =' untuk memadankan nilai atau corak separa.
  • Gunakan pertanyaan berparameter dengan parameter terikat untuk mengelakkan serangan suntikan SQL.

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!

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