Rumah >pangkalan data >tutorial mysql >Adakah mysql_real_escape_string() Benar-benar Boleh Dipercayai untuk Mencegah Suntikan SQL?
Bolehkah Anda Bergantung pada mysql_real_escape_string() untuk Melindungi Pertanyaan Anda?
Walaupun penggunaan yang betul, kebimbangan telah dibangkitkan mengenai kebolehpercayaan mysql_real_escape_string ) dalam melindungi daripada suntikan SQL. Untuk menjelaskan isu ini, mari kita mendalami batasan fungsi dan kesesuaiannya untuk membuat kenyataan yang disediakan tersuai.
Kod Bukti dan Analisis:
Menurut MySQL rasmi dokumentasi, fungsi mysql_real_escape_string() dipengaruhi oleh set aksara sambungan. Untuk memastikan prestasi optimum, ia mencadangkan menggunakan mysql_set_character_set() dan bukannya SET NAMES atau SET CHARACTER SET pernyataan untuk mengubah suai set aksara.
#include <mysql/mysql.h> int main() { // Create a MySQL connection MYSQL *conn = mysql_init(NULL); // Set the character set to UTF-8 using mysql_set_character_set() mysql_set_charset(conn, "utf8", MY_CS_PRIMARY); // Prepare a query using mysql_real_escape_string() char *query = mysql_real_escape_string(conn, "SELECT * FROM users"); // Execute the query mysql_query(conn, query); // Release memory free(query); mysql_close(conn); return 0; }
Dalam kod ini, kami secara eksplisit menetapkan set aksara kepada UTF-8 menggunakan mysql_set_character_set(), memastikan bahawa mysql_real_escape_string() digunakan dengan pengekodan yang betul.
Kesimpulan:
Walaupun pengehadan tertentu mungkin wujud, mysql_real_escape_string() masih boleh digunakan untuk mencipta pernyataan yang disediakan asas. Dengan memastikan set aksara yang sesuai ditakrifkan menggunakan mysql_set_character_set(), anda boleh mengekalkan tahap keselamatan yang diingini terhadap suntikan SQL.
Atas ialah kandungan terperinci Adakah mysql_real_escape_string() Benar-benar Boleh Dipercayai untuk Mencegah Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!