2011-04-29 1 views
1

읽은 적이있는 항목을 검색하고 검색했지만 시도했는데 어떤 이유로 하드 코딩 된 값 대신 변수를 사용할 때 쿼리가 실패합니다 . 하드 코딩 된 값 대신 변수를 사용하면 PHP/MySQL - 쿼리가 실패합니다.

내 쿼리입니다 :

$bugzilla_query="SELECT * FROM profiles WHERE userid='".$bugzilla_id."'"; 

내가 수행하여 쿠키의 값을 얻고 다음

$bugzilla_id = $_COOKIE["Bugzilla_login"]; 

내가 쿼리가 잘못된 것을 의심하기 시작하고 있지만 변수 유지를 올바른 것으로 보일지라도 쿠키 값은 올바르게 검색되지 않지만 다시 설정하면 $bugzilla_id = 642; 여전히 작동하지 않지만 내가 수행하면 $bugzilla_query="SELECT * FROM profiles WHERE userid=642"; 완벽하게 작동합니다.

흠, 혼란스러워!

+2

사용자는'$ bugzilla_query'에있는 내용을 볼'var_dump' – Neal

+0

잘 작동하는 다른 스크립트에서 같은 구문을 복사했습니다 변수가 포함되어 있습니다. 공백을 추가했지만 여전히 운이 없다. ( – martincarlin87

+1

SQL 삽입을 피하기 위해 데이터를 올바르게 이스케이프 처리해야한다. – mfonda

답변

0

대단히 감사합니다. 내가 가진

:

if ($bugzilla_id <= 0 || $bugzilla_id = '' || !isset($bugzilla_id)) 
{ 
    return "No Bugzilla cookie is set!"; 
}  

내가 분명히 필요 : 내가 =을 놓친 때문에 나는 ''$bugzilla_id을 설정했다

if ($bugzilla_id <= 0 || $bugzilla_id == '' || !isset($bugzilla_id)) 
{ 
    return "No Bugzilla cookie is set!"; 
}  

내가 내 코드에서 만든 바보 같은 오타이었다 밝혀 비교 검사에서

내 조언은 - 그리고 나 자신이 직접 시작할 수도 있습니다 - 변수를 오른쪽에 놓는 것이므로 비교를 반대 방향으로 작성하면 곧바로 실패합니다. 우연히 Joel의 웹 사이트에서 좋은 프로그래머의 표시로 보았습니다 :/

1

$ bugzilla_id가 정수라고 생각되면 intval()로 감싸서 정수로 전달되는지 확인하십시오.

3

일반적으로 사용자가 직접 수정할 수있는 값을 쿼리에 직접 입력하고 싶지는 않습니다. 또한 이것이 숫자가되어야한다면 왜 변수 사용 가능 쿼리에서는 작은 따옴표로 묶고 하드 코딩 된 쿼리에서는 사용하지 않을까요? 차이점에 주목 하시겠습니까? 이것을 시도하십시오 :

$bugzilla_query = sprintf("SELECT * FROM profiles WHERE userid = %d", $bugzilla_id); 

이렇게하면 쿼리로 들어가기 전에 정수로 캐스팅됩니다.

+0

감사합니다. 동생 이상한 .... – martincarlin87

+1

echo $ bugzilla_query 그리고 그것을 mysql에 복사/붙여 넣기하고 직접 실행하십시오. 무슨 일이야? 쿼리가 뭐지? –

+0

안녕 데이비드, 주말 내내 그렇게하지 않았지만 당신의 제안을 시도했습니다. 쿼리가'SELECT * FROM profiles WHERE userid = 0'으로 바뀌기 때문에 뭔가가 변수를 가지고 놀고 있습니다. – martincarlin87

관련 문제