mysql_real_escape_string()에 수정 불가능한 결함이 있습니까?
일부 회의론자들은 mysql_real_escape_string() 함수에 근본적인 결함이 있으며 SQL 쿼리를 안정적으로 보호할 수 없다고 주장합니다. . 그들은 오래된 기사를 증거로 지적합니다.
사용자 정의 준비된 명령문에 사용할 수 있습니까?
이러한 우려에도 불구하고 mysql_real_escape_string()을 활용하여 생성하는 것은 여전히 가능합니다. 맞춤 준비된 진술. 그러나 문자 집합 처리에는 세심한 주의가 필요합니다.
해결 방법:
mysql_real_escape_string()에 대한 MySQL C API 설명서에 따르면 mysql_set_character_set()을 사용하여 설정해야 합니다. 문자 집합. 이렇게 하면 mysql_real_escape_string()에서 사용하는 문자 집합에도 영향을 미칩니다.
코드 예:
#include <mysql.h> int main() { MYSQL *conn = mysql_init(NULL); mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0); // Change the encoding using mysql_set_charset() mysql_set_charset(conn, "utf8"); // Create a custom prepared statement using mysql_real_escape_string() char query[1024]; mysql_real_escape_string(conn, query, "SELECT * FROM users WHERE username='test'", sizeof(query)); // Execute the query mysql_query(conn, query); mysql_close(conn); return 0; }
이 접근 방식을 따르고 SET NAMES/SET CHARACTER SET을 피하면 됩니다. , mysql_real_escape_string()을 효과적으로 활용하여 SQL 쿼리를 삽입으로부터 보호할 수 있습니다.
위 내용은 mysql_real_escape_string()을 사용자 정의문과 함께 안전하게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!