반응형
mysql_real_escape_string()은 어떻게 작동합니까?
MySQL에 쿼리로 문자열(C에 있는)을 보내야 해서 다음과 같은 문자를 피하기 위해 mysql_real_escape_string()을 사용했습니다.\0
아니면\n
:
#include <mysql/mysql.h>
int loginQuery(char *Nickname, char *Password)
{
char bufferutility[READBUFSIZE]="SELECT * FROM user WHERE Nickname='";
char bufferutility2[READBUFSIZE*2+1];
strcat(bufferutility,Nickname);
strcat(bufferutility,"' AND Password='");
strcat(bufferutility,Password);
strcat(bufferutility,"';");
if(mysql_real_escape_string(conn,bufferutility2,bufferutility,strlen(bufferutility))==(unsigned long)-1){
printf("\nEscaping error\n");
}
//code for mysql_real_query() here
}
하지만 이런 오류가 발생했습니다.You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\'Hello\n\' AND Password=\'World\n\'' at line 1
제가 무엇을 잘못했지요?
mysql_real_escape_string()
현재 연결에 사용되는 문자 집합에 따라 특정 문자를 열 값으로 탈출하는 API 기능을 사용합니다.
따라서 전체 SQL 문을 탈출하는 대신 Nicket과 Password 값을 탈출한 후 SQL 문 문자열에 추가해야 합니다.
예(테스트되지 않았으며 오류 검사 없이):
char *escNickname, *escPassword;
escNickname= alloca(strlen(Nickname) * 2 + 1);
escPassword= alloca(strlen(Password) * 2 + 1);
mysql_real_escape_string(conn, escNickname, Nickname, strlen(Nickname));
mysql_real_escape_string(conn, escPassword, Password, strlen(Password));
sprintf(bufferUtility, "SELECT * FROM user WHERE Nickname='%s' AND Password='%s'. escNickname, escPassword);
언급URL : https://stackoverflow.com/questions/74852541/how-does-mysql-real-escape-string-work
반응형
'bestsource' 카테고리의 다른 글
jQuery를 사용하여 여러 개의 선택 상자 값을 얻는 방법은? (0) | 2023.09.21 |
---|---|
C를 배우기에 가장 좋은 장소는 어디입니까? (0) | 2023.09.21 |
WordPress 포스트 메타데이터(사용자 정의 필드) 포스트 링크별 업데이트 (0) | 2023.09.21 |
AngularJS에서 CREATE 컨트롤러와 EDIT 컨트롤러를 결합하는 것이 좋은 방법입니까? (0) | 2023.09.21 |
헤드리스 워드프레스로 실 시작 명령에 핫 재장전을 시도하는 중 (0) | 2023.09.21 |