2014-11-16 2 views
-1

SQL2000을 사용하고 있습니다. SQLite를 얻지 않고 작은 따옴표 &을 쿼리에 이중 인용 부호로 이스케이프 처리하려면 어떻게해야합니까? 내 나쁜 영어 죄송합니다SQL Server에서 작은 따옴표 및 큰 따옴표를 어떻게 이스케이프 처리합니까?

PHP: 
$Username = "s'ql'fp".'"ffo"t'; 

SQL: 
$Query = "INSERT INTO Users (Username, Password) VALUES (".$Username.", '432432')"; 
mssql_query($Query); 

는 : 트릭을 할해야 삽입 된 데이터에 대한

답변

-2

mysqli_real_escape_string()를 S.

또한 varchar()를 대괄호로 묶어야합니다. VALUES (SOME STRING)을 삽입하면 이스케이프가 도움이되지 않습니다. 주로 정수로 작동합니다.

+0

SQL 서버의 보안 쿼리에이 함수를 사용할 수 있습니까? 도피하는 것과 똑같은가요? – Yoshimitso

+0

보안에 도움이 될 것입니다. – LukasS

1

당신은 SQL에 그 안에 문자열 따옴표로 상수와 이중 모든 작은 따옴표로 묶어야합니다 :

PHP: 
$Username = "s'ql'fp".'"ffo"t'"; 

SQL: 
$Query = "INSERT INTO Users (Username, Password) VALUES ('" 
      . str_replace("'", "''", $Username), 
      . "', '432432')"; 
mssql_query($Query); 

str_replace("'", "''", $Username)"s''ql''fp".''"ffo"t''" 될 것입니다, 나는. 이자형. 모든 작은 따옴표가 두 배가됩니다. 이것은 변수 $Username을 변경하지 않고 SQL 문으로 사용 된 문자열 만 변경합니다.

아마 암호도 마찬가지입니다 (여기서 사용하는 리터럴 암호의 경우처럼 따옴표가없는 문자열이 아닌 경우).

+0

로그인시이 문자를 사용할 수 있어야하므로 사용할 수 없습니다. – Yoshimitso

+0

@ Yoshimitso 예, 작은 따옴표는 사용자 이름에 포함될 수 있습니다. 그러나 SQL에서 문자열 리터럴을 작은 따옴표로 묶으면 문자열 내에서 문자열 리터럴을 두 번 사용해야합니다. – FrankPl

관련 문제