2009-11-01 7 views
1

나를 용서해라, 나는 초보자 다.PHP mysql 질의 문법에 관한 질문 ""의

$query = "INSERT INTO scenario_needgames VALUES ("$id", "Battle of the Bulge")"; 

는 phpMyAdmin과의 쿼리 빌더 나에게 작동이 약간 수정 된 문자열을 준 : 다음 코드는 구문 분석 오류를 반환

$query = "INSERT INTO scenario_needgames VALUES (\"$id\" , \"Battle of the Bulge\");"; 

그러나 나는 따옴표를 이스케이프해야 할 이유에 대해 혼란 스러워요 그들이 실제로 쿼리 구문의 일부분 일 때 - 제목이나 문자열의 일부가 아닌 경우? 내가 배운 입문서에는 그러한 간단한 끈에 대한 것들은 포함되어 있지 않습니다.

호기심에 있으면 $ id 값은 7 자리 숫자, 4 자리 숫자, 3 자리 숫자입니다.

감사합니다.

+0

것도 유효한 문자열이 없기 때문에

은, PHP는 구문 분석 오류를 반환합니다. 모두 초보자로 시작합니다. – pavium

답변

3

따옴표가 또는 당신이 따옴표를 탈출해야 하나의 인용 문자열을 사용할 수 없으며, 이중 인용 된 문자열 내에서 이스케이프해야하지만 당신이 직접 변수를 보간 할 수없는 대신 연결을 사용할 수 있습니다

$query = 'INSERT INTO scenario_needgames VALUES ("' . $id . '", "Battle of the Bulge")'; 

또한, 단지 작은 따옴표로 내부 따옴표를 대체 :

$query = "INSERT INTO scenario_needgames VALUES ('$id', 'Battle of the Bulge')"; 

나는 정확하고 안전하게 문자열을 인용 mysql_real_escape_string을 사용하는 것이 좋습니다 것입니다. 준비된 문을 PDO 또는 mysqli 대신 사용하는 것이 좋습니다.

+0

아시다시피, 알고 계시 겠지만 여전히 사람들에게 그 끔찍한 도피를 사용하지 말고 올바른 준비 문을 사용하도록 권유 해주십시오. SQL 문 내부의 모든 문자열 연결은 눈이 피로 해지고 내 뇌가 썩습니다. 또한 안전하지도 않습니다. – shylent

+0

@shylent - 내 편집을 보지 못했음에 틀림 없다. – karim79

+0

나는 downvote하지 않았다. (이 대답은 적절하고 적절하다. – shylent

3

MySQL이 아닌 PHP 때문에 이스케이프 중입니다. "문자"는 문자열의 끝으로 해석 될 수 있기 때문에 "문자열"- "문자열"을 이스케이프 처리해야합니다.

답안의 코드 색상을보십시오. 첫 번째 문자열의 색상이 잘못되었습니다. "및"의 부분은 문자열이 아닌 코드처럼 표시됩니다.

2

구문 분석 오류를 반환하는 PHP입니다.

PHP의 관점에서 보면, 문자열은 따옴표로 구분 된 일련의 문자입니다. 하나는 처음에, 하나는 끝에 있습니다.

문자열 안에 문자열을 넣으려면 이스케이프해야하므로 PHP는 내부 따옴표가 문자열의 끝이 아님을 알고 있습니다. 당신이 그들을 탈출하지 않는 한 당신이 $query에 할당하고있는 것은 (각 끝에 따옴표 포함) 용서