Tôi có thể sử dụng cái gì thay vì Mysql_real_escape_string?
Show Đối số Chuỗi trong đối số Các ký tự được mã hóa là char query[1000],*end; end = my_stpcpy(query,"INSERT INTO test_table VALUES('"); end += mysql_real_escape_string(&mysql,end,"What is this",12); end = my_stpcpy(end,"','"); end += mysql_real_escape_string(&mysql,end,"binary data: \0\r\n",16); end = my_stpcpy(end,"')"); if (mysql_real_query(&mysql,query,(unsigned int) (end - query))) { fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql)); }0, char query[1000],*end; end = my_stpcpy(query,"INSERT INTO test_table VALUES('"); end += mysql_real_escape_string(&mysql,end,"What is this",12); end = my_stpcpy(end,"','"); end += mysql_real_escape_string(&mysql,end,"binary data: \0\r\n",16); end = my_stpcpy(end,"')"); if (mysql_real_query(&mysql,query,(unsigned int) (end - query))) { fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql)); }1, char query[1000],*end; end = my_stpcpy(query,"INSERT INTO test_table VALUES('"); end += mysql_real_escape_string(&mysql,end,"What is this",12); end = my_stpcpy(end,"','"); end += mysql_real_escape_string(&mysql,end,"binary data: \0\r\n",16); end = my_stpcpy(end,"')"); if (mysql_real_query(&mysql,query,(unsigned int) (end - query))) { fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql)); }2 (ASCII 0), char query[1000],*end; end = my_stpcpy(query,"INSERT INTO test_table VALUES('"); end += mysql_real_escape_string(&mysql,end,"What is this",12); end = my_stpcpy(end,"','"); end += mysql_real_escape_string(&mysql,end,"binary data: \0\r\n",16); end = my_stpcpy(end,"')"); if (mysql_real_query(&mysql,query,(unsigned int) (end - query))) { fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql)); }3, char query[1000],*end; end = my_stpcpy(query,"INSERT INTO test_table VALUES('"); end += mysql_real_escape_string(&mysql,end,"What is this",12); end = my_stpcpy(end,"','"); end += mysql_real_escape_string(&mysql,end,"binary data: \0\r\n",16); end = my_stpcpy(end,"')"); if (mysql_real_query(&mysql,query,(unsigned int) (end - query))) { fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql)); }4 và Control+Z. Nói một cách chính xác, MySQL chỉ yêu cầu dấu gạch chéo ngược đó và ký tự trích dẫn được sử dụng để trích dẫn chuỗi trong truy vấn được thoát. mysql_real_escape_string() trích dẫn các ký tự khác để dễ đọc hơn trong tệp nhật ký. Để so sánh, hãy xem quy tắc trích dẫn cho chuỗi ký tự và hàm SQL trong Chuỗi ký tự, và Hàm chuỗi và Toán tửChuỗi được trỏ tới bởi char query[1000],*end; end = my_stpcpy(query,"INSERT INTO test_table VALUES('"); end += mysql_real_escape_string(&mysql,end,"What is this",12); end = my_stpcpy(end,"','"); end += mysql_real_escape_string(&mysql,end,"binary data: \0\r\n",16); end = my_stpcpy(end,"')"); if (mysql_real_query(&mysql,query,(unsigned int) (end - query))) { fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql)); }8 byte. Bạn phải phân bổ bộ đệm to dài ít nhất mysql_real_escape_string() 0 byte. (Trong trường hợp xấu nhất, mỗi ký tự có thể cần được mã hóa bằng cách sử dụng hai byte và phải có chỗ cho byte null kết thúc. ) Khi mysql_real_escape_string() trả về, nội dung của to là một chuỗi kết thúc null. Giá trị trả về là độ dài của chuỗi được mã hóa, không bao gồm byte null kết thúcNếu bạn phải thay đổi bộ ký tự của kết nối, hãy sử dụng hàm Ví dụ sau chèn hai chuỗi đã thoát vào một câu lệnh char query[1000],*end; end = my_stpcpy(query,"INSERT INTO test_table VALUES('"); end += mysql_real_escape_string(&mysql,end,"What is this",12); end = my_stpcpy(end,"','"); end += mysql_real_escape_string(&mysql,end,"binary data: \0\r\n",16); end = my_stpcpy(end,"')"); if (mysql_real_query(&mysql,query,(unsigned int) (end - query))) { fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql)); } Hàm Độ dài của chuỗi mã hóa được đặt trong đối số Bởi vì mysql_real_escape_string có bị phản đối không?Tiện ích mở rộng này không được dùng trong PHP 5. 5. 0 và nó đã bị xóa trong PHP 7. 0 .
Khi nào thì sử dụng mysql_real_escape_string?Định nghĩa và cách sử dụng
. escapes special characters in a string for use in an SQL query, taking into account the current character set of the connection.
mysql_real_escape_string có ngăn SQL injection không?PHP cung cấp mysql_real_escape_string() để thoát các ký tự đặc biệt trong chuỗi trước khi gửi truy vấn tới MySQL. Hàm này được nhiều người sử dụng để thoát dấu nháy đơn trong chuỗi và đồng thời ngăn chặn các cuộc tấn công SQL injection .
mysql_real_escape_string có an toàn không?Nếu bạn sử dụng mysql_real_escape_string một cách nhất quán mỗi khi bạn đưa nội dung vào một chuỗi ký tự SQL, thì không sao, không có vấn đề gì về bảo mật . |