23.8.7.54 mysql_real_escape_string()
unsigned long mysql_real_escape_string(MYSQL *mysql,
char *to, const char *from, unsigned long length)
mysql
은 유효한 열린 연결해야합니다. 이스케이프는 서버에서 사용되는 문자 집합에 따라 다르기 때문에 이것이 필요합니다설명
이 함수는 SQL 문에서 사용할 수있는 유효한 SQL 문자열을 만드는 데 사용됩니다. 섹션 9.1.1 "문자열 리터럴" 을 참조하십시오.
from
에서 문자열은 연결의 현재 문자 집합을 고려하여 탈출 된 SQL 문자열 인코딩됩니다. 결과는 to
에두고 종단의 NULL 바이트가 부가됩니다. 인코딩 된 문자는 ' \
'' '
'' "
" NUL
(ASCII 0) " \n
"" \r
"및 Control-Z입니다. 엄밀히 말하면, MySQL은 쿼리의 문자열에 따옴표를 위해 사용되는 백 슬래시와 인용 문자가 이스케이프되는 것만을 필요로합니다. mysql_real_escape_string()
는 다른 문자를 로그 파일에서 읽을 수 있도록 따옴표로 묶어야합니다. 비교 내용은 섹션 9.1.1 "문자열 리터럴" 과 섹션 12.5 "문자열 함수" 리터럴 문자열과 QUOTE()
SQL 함수의 따옴표 사용 규칙을 참조하십시오.
from
에 의해 지시되는 문자열은 length
바이트의 길이 여야합니다. to
버퍼를 적어도 length*2+1
바이트가되도록 할당해야합니다. (최악의 경우 각 문자를 2 바이트를 사용하여 인코딩 할 필요가있을 수 있기 때문에 종단의 NULL 바이트 분의 여유가 필요합니다.) mysql_real_escape_string()
이 돌아 왔을 때의 to
의 내용은 NULL 종단 문자열입니다. 반환 값은 종단의 NULL 문자가 포함 된 인코딩 된 문자열의 길이입니다.
연결의 문자 집합을 변경해야하는 경우 SET NAMES
(또는 SET CHARACTER SET
) 문을 실행하는 것이 아니라 mysql_set_character_set()
함수를 사용합니다. mysql_set_character_set()
는 SET NAMES
처럼 작동하지만, SET NAMES
는 영향을 미치지 않는다 mysql_real_escape_string()
에서 사용되는 문자 세트에도 영향을 미칩니다.
Example
char query[1000],*end; end = strmov(query,"INSERT INTO test_table VALUES("); *end++ = '\''; end += mysql_real_escape_string(&mysql,end,"What is this",12); *end++ = '\''; *end++ = ','; *end++ = '\''; end += mysql_real_escape_string(&mysql,end,"binary data: \0\r\n",16); *end++ = '\''; *end++ = ')'; if (mysql_real_query(&mysql,query,(unsigned int) (end - query))) { fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql)); }
예를 사용하는 strmov()
함수는 libmysqlclient
라이브러리에 포함되어 strcpy()
처럼 작동하지만 첫 번째 매개 변수의 종단의 NULL 포인터를 반환합니다.
반환 값
to
놓인 종단의 NULL 문자가 포함 된 값의 길이.
오류
없음.