2012-07-31 2 views
0

원시 SELECT 쿼리가 작동하지만 PHP 코드에 플러그인 된 변수가 없습니다.원시 SELECT 쿼리가 작동하지만 PHP 코드에 연결된 변수가 없습니다.

다음
SELECT * FROM `program_list` 
WHERE 
speciality LIKE '%IM%' 
AND (stepone2digit <= 78 OR stepone2digit=0) 
AND (stepone3digit <= 189 OR stepone3digit=0) 
AND (steptwock2digit <= 78 OR steptwock2digit=0) 
AND (steptwock3digit <= 189 OR steptwock3digit=0) 
AND (steptwocs = 'PASS' OR steptwocs IS NULL) 
AND (steponeattempt <= 1 OR steponeattempt=0) 
AND (steptwockattempt <= 1 OR steptwockattempt=0) 
AND (steptwocsattempt <= 2 OR steptwocsattempt=0) 
AND ((USCEImportance = 'MAND' AND USCENoOfMonths<= '3') OR USCEImportance = 'PREF') 
AND (yearsfrompassing >= 2 OR yearsfrompassing=0); 

내가 PHP에 전달하고 방법은 다음과 같습니다 : 여기

내 실제 선택 쿼리입니다

$sql = "SELECT * FROM `program_list` 
    WHERE 
    speciality LIKE '%%s%' 
    AND (stepone2digit <= %d OR stepone2digit=0) 
    AND (stepone3digit <= %d OR stepone3digit=0) 
    AND (steptwock2digit <= %d OR steptwock2digit=0) 
    AND (steptwock3digit <= %d OR steptwock3digit=0) 
    AND (steptwocs = '%s' OR steptwocs IS NULL) 
    AND (steponeattempt <= %d OR steponeattempt=0) 
    AND (steptwockattempt <= %d OR steptwockattempt=0) 
    AND (steptwocsattempt <= %d OR steptwocsattempt=0) 
    AND ((USCEImportance = 'MAND' AND USCENoOfMonths<= '%s') OR USCEImportance = 'PREF') 
    AND (yearsfrompassing >= %d OR yearsfrompassing=0) 

나는 원시 쿼리가 잘 작동하지만, 프로그램을 실행할 때 나는 변수를 연결하면 PHP에서 실행하면 결과가 반환되지 않습니다.

무엇이 누락 되었습니까? 도와주세요.

+0

/% 어떻게 % d을 숫자로 변환합니까? – John3136

+0

echo $ sql을 사용하여 디버깅을 시도하셨습니까? – Omesh

+0

'% s'와'% d'을 실제 값으로 대체하기 위해'sprintf'를 사용하십시오. – Jocelyn

답변

0

'% d'및 '% s'을 (var_dump ($ sql)을 사용하여 $ sql을 디버깅하려고 시도하지 않았습니다.) 할당하지 않았습니다. sprintf를 사용해야합니다. 예를 들어 :

$sql = sprintf("SELECT * FROM `program_list` WHERE speciality LIKE '%%s%'",$speciality); 
0

난 당신이 실제 값으로 % s 및 % d 개를 교체 sprintf를 사용하는 가정합니다.

문제는이 코드 조각에 :

speciality LIKE '%%s%' 

%%은 하나의 %로 대체 될 것이며, %'sprintf 유효하지 않기 때문에 마지막 % 경고 통지를 반환합니다.

speciality LIKE '%%%s%%' 

귀하의 전체 쿼리는 다음과 같습니다 :

$sql = "SELECT * FROM `program_list` 
WHERE 
speciality LIKE '%%%s%%' 
AND (stepone2digit <= %d OR stepone2digit=0) 
AND (stepone3digit <= %d OR stepone3digit=0) 
AND (steptwock2digit <= %d OR steptwock2digit=0) 
AND (steptwock3digit <= %d OR steptwock3digit=0) 
AND (steptwocs = '%s' OR steptwocs IS NULL) 
AND (steponeattempt <= %d OR steponeattempt=0) 
AND (steptwockattempt <= %d OR steptwockattempt=0) 
AND (steptwocsattempt <= %d OR steptwocsattempt=0) 
AND ((USCEImportance = 'MAND' AND USCENoOfMonths<= '%s') OR USCEImportance = 'PREF') 
AND (yearsfrompassing >= %d OR yearsfrompassing=0)"; 

을 그리고 당신의 쿼리에서 값을 삽입 할 sprintf를 사용하는 것을 잊지 마세요 대신 그 구문을 사용해야합니다.

+0

@Ram 내 대답이 문제를 해결합니까? – Jocelyn

관련 문제