2012-04-25 3 views
-1

이 코드 줄에 어떤 문제가 있습니까?검색어에 오류가 발생했습니다.

$query= "SELECT status FROM follow WHERE user_id1= $COOKIE['user_id'] AND user_id2= 
$user_id"; 

나는 오류 메시지가 계속 : 구문 오류, 예기치 못한 T_ENCAPSED_AND_WHITESPACE 기본적으로이

$query= "SELECT status FROM follow WHERE user_id1 = {$_COOKIE['user_id']} 
AND user_id2 = {$user_id}"; 

What is wrong with this line of code?

을 시도 T_STRING 또는 T_VARIABLE 또는 T_NUM_STRING

+0

'echo $ query'를 사용해보세요. 문제가 무엇인지에 대한 힌트를 줄 수 있습니다. –

+1

바비 테이블에 대해 들어 보셨습니까? http://bobby-tables.com/ –

+1

"이 코드 줄에는 어떤 문제가 있습니까?" 아, 너무, 아주. – Andrew

답변

-2

을 기대 :

구문 분석 오류 , 배열은 $COOKIE입니다. 당신이 접근하고있는 $_COOKIE 인 것은 아니지만, 문자열에 캡슐화되어 있기 때문에 PHP 파서를 지원하여 실제로 변수 (배열)이고 문자열의 일부가 아님을 나타낼 수 있습니다. 이를 수행하려면 "strings"안에 변수를 사용할 때 {$like_this} 주위에 변수를 캡슐화해야합니다.

4

귀하의 솔루션은 SQL 삽입에 취약합니다. 쿠키의 사용자 아이디가 1; drop table follow; -- 일 경우 어떻게됩니까? 당신의 팔로우 테이블에 작별 인사를하십시오.

mysql_real_escape_string() (편집 : 보간 된 변수 주변에 따옴표 붙이기)을 사용해야합니다 (자세한 내용은 this page 참조). 하지만 정말로 당신은 prepared statements을 원합니다.

+0

mysql_real_escape_string()을 사용해야하는 이유는 무엇입니까? –

+4

원시 사용자 제공 데이터를 SQL 쿼리에 삽입하는 것이 잘못 되었기 때문에. – Venge

+1

mysql_real_escape_string이 MySQL로 전달하기 전에 문자열을 이스케이프하도록 디자인 된 것과 거의 같습니다! – Venge

-4

이 오류를 일으키는 배열 키를 작은 따옴표로 묶어
문자열 내에서 따옴표를 생략하거나 중괄호를 사용하십시오.

당신은 또한 쿼리로 가서 당신의 가치는 당신은 문자열의 내부 배열의 키를 인용 사용할 수 없습니다

$user_id1 = (int)$COOKIE['user_id']; 
$user_id2 = (int)$user_id; 
$query="SELECT status FROM follow WHERE user_id1=$user_id1 AND user_id2=$user_id2"; 
+1

사용자 ID가 int가 아닌 경우 어떻게됩니까? – Venge

+0

@Patrick 오. 그게 당신에게 중요한가? :) –

+0

* 한숨 * 적어도 mysql_real_escape_string보다 정확합니다. – Ryan

3

적절한 형식이 있는지 확인해야합니다. 당신은 따옴표 {...} 구문을 사용, 또는 드롭해야한다 ( 문자열 외부 경고 를 발행 할 것입니다,하지만 당신은 알고, PHP.)

모두 당신이 mysql_real_escape_string가 올바른 사용 주장, 모두가 당신이 PDO를 사용 주장 준비된 진술은 훨씬 정확합니다.

+1

mysql_real_escape_string을 사용한다고 주장하는 모든 사람들은 IN-friggin-correct이고 단서가 없습니다. –

관련 문제