Adakah mysql_real_escape_string() Fatal Cacat?
Walaupun dakwaan tidak boleh dipercayai, mysql_real_escape_string() kekal sebagai alat yang berharga untuk mencipta kenyataan disediakan anda sendiri . Berikut ialah pecahan fungsinya dan cara menggunakannya dengan berkesan.
mysql_real_escape_string() Diterangkan
Dokumentasi MySQL C API menyatakan: "Jika anda perlu menukar aksara set sambungan, anda harus menggunakan fungsi mysql_set_character_set() daripada melaksanakan SET pernyataan NAMES (atau SET CHARACTER SET)."
Ini bermakna untuk menggunakan mysql_real_escape_string() dengan betul, anda harus menggunakan mysql_set_charset(). mysql_set_charset() PHP mencerminkan mysql_set_character_set() MySQL.
Kod Bukti
<?php $mysqli = new mysqli("localhost", "username", "password", "database"); // Set the character set using mysql_set_charset() $mysqli->set_charset("utf8mb4"); // Prepared statement using mysql_real_escape_string() $stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?"); $stmt->bind_param('s', mysql_real_escape_string($_GET['username'])); $stmt->execute(); ?>
Dalam contoh ini, mysql_set_charset() memastikan sambungan menggunakan set aksara utf8mb4 Ini membolehkan mysql_real_escape_string() mengendalikan aksara dengan betul yang mungkin terdedah kepada suntikan SQL.
Kesimpulan
Walaupun penting untuk memahami batasan mysql_real_escape_string(), menggunakan ia bersempena dengan mysql_set_charset() membolehkan anda mencipta dengan berkesan kenyataan anda sendiri yang disediakan. Dengan mengambil langkah ini, anda boleh mengurangkan risiko suntikan SQL dan mengekalkan keselamatan aplikasi anda.
Atas ialah kandungan terperinci Adakah `mysql_real_escape_string()` Benar-benar Cacat, atau Hanya Disalahpahami?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!