>  기사  >  백엔드 개발  >  mysql_real_escape_string()을 사용자 정의문과 함께 안전하게 사용할 수 있습니까?

mysql_real_escape_string()을 사용자 정의문과 함께 안전하게 사용할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-19 06:04:02802검색

Can mysql_real_escape_string() Be Used Safely with Custom Prepared Statements?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.