2014-07-24 3 views
-2

데이터베이스에서 특정 프로필을 검색하는 스크립트를 만들었습니다.검색 스크립트에서 Mysql 오류가 발생했습니다.

if(!empty($playerLastName)){ 
    $searchQuery .= 'WHERE playerLastName LIKE "%' . $playerLastName . '%" AND playerStatus = 1'; 
} 
if(!empty($playerAge)){ 
    $searchQuery .= (!empty($searchQuery) ? ' AND ' : 'WHERE ') . 'playerAge = "' . $playerAge . '"'; 
} 
if(is_numeric($playerSex)){ 
    $searchQuery .= (!empty($searchQuery) ? ' AND ' : 'WHERE ') . 'playerSex = ' . $playerSex .'" AND  playerStatus = 1'; 
} 
if(!empty($playerPosition)){ 
    $searchQuery .= (!empty($searchQuery) ? ' AND ' : 'WHERE ') . 'playerPosition = "' . $playerPosition . '" AND playerStatus = 1'; 
} 
if(!empty($playerCitizenship)){ 
    $searchQuery .= (!empty($searchQuery) ? ' AND ' : 'WHERE ') . 'playerCitizenship = "' . $playerCitizenship . '" AND playerStatus = 1'; 
} 

지금까지는 그렇게 좋았습니다. 이 코드 문자열 :

if (is_numeric ($ playerSex)) { 
    $ SearchQuery. = (! empty ($ SearchQuery)? 'AND': 'WHERE'). 'playerSex ='. $ playerSex; 

섹스에 따라 플레이어를 보여줍니다,하지만 난 추가하는 경우 :

You have an error in your SQL syntax; check the manual That corresponds to your MySQL server version for the right syntax to use near '"AND playerStatus = 1' at line 1.

나는 이유를 이해하지 않습니다 :

'"AND playerStatus = 1'; 
    $ SearchQuery. = (! empty ($ SearchQuery)? 'AND': 'WHERE'). 'playerSex ='. $ playerSex .'"AND playerStatus = 1'; 

나는이 오류 - (

+0

나는'$ searchQuery'를 출력 할 것을 제안합니다. 네가 생각하는 것처럼 보이지 않는 것 같아. – andrewsi

+1

'''을 공백으로 대체하십시오. –

+1

각 개별 검색 옵션을 배열에 넣은 다음 SQL 문을 생성하도록 해당 배열을 파싱하는 것이 좋습니다. 이렇게하면 코드를 훨씬 쉽게 유지 보수 할 수있을뿐만 아니라 읽기. – andrewsi

답변

2

처음 시작시 큰 따옴표를 제거하십시오.

'"AND playerStatus = 1'; 
^---------------------------------here 

및 공백으로 교체하십시오.

0

playerSex 앞에 "AND"또는 "WHERE"다음에 공백이 누락 된 것처럼 보입니다. 현재 쓰여지고있는대로 ANDplayerSex처럼 끝날 것입니다.

+0

답장을 보내 주셔서 감사합니다. 따옴표를 넣는 것을 잊었습니다. – user3607990

0

해당 코드에는 여러 가지 문제가있을 수 있습니다. 당신은 너무 그것을 작동하지 않을 수 있습니다 $searchQuery의 이전 부분에 따라 WHERE 전에 공간을 두지 않았다

if(!empty($playerLastName)){ 
    $searchQuery .= 'WHERE playerLastName LIKE "%' . $playerLastName . '%" AND playerStatus = 1'; 
} 

- 당신은 공간이 여기에 추가해야합니다 :

우선입니다.

같은 당신이 사용하는 다른 모든 부분에 : 여기

(!empty($searchQuery) ? ' AND ' : 'WHERE ') 

당신은 또한 WHERE 전에 공간을 두지 않았다 - 당신이 그것을해야한다. 문제가 발생

마지막 것입니다

if(!empty($playerLastName)){ 
    $searchQuery .= ' WHERE playerLastName LIKE "%' . $playerLastName . '%" AND playerStatus = 1'; 
} 
if(!empty($playerAge)){ 
    $searchQuery .= (!empty($searchQuery) ? ' AND ' : ' WHERE ') . 'playerAge = "' . $playerAge . '"'; 
} 
if(is_numeric($playerSex)){ 
    $searchQuery .= (!empty($searchQuery) ? ' AND ' : ' WHERE ') . 'playerSex = "' . $playerSex .'" AND playerStatus = 1'; 
} 
if(!empty($playerPosition)){ 
    $searchQuery .= (!empty($searchQuery) ? ' AND ' : ' WHERE ') . 'playerPosition = "' . $playerPosition . '" AND playerStatus = 1'; 
} 
if(!empty($playerCitizenship)){ 
    $searchQuery .= (!empty($searchQuery) ? ' AND ' : ' WHERE ') . 'playerCitizenship = "' . $playerCitizenship . '" AND playerStatus = 1'; 
} 

편집 :

if(is_numeric($playerSex)){ 
    $searchQuery .= (!empty($searchQuery) ? ' AND ' : 'WHERE ') . 'playerSex = ' . $playerSex .'" AND  playerStatus = 1'; 
} 

당신은 그래서 최종 코드는 아마 같이한다 playerSex =

후 여기에 큰 따옴표 (")를 그리워 나는 의도적으로 질문의 일부를 놓쳤다. 뭔가 잘못되었습니다 (예를 들어 변수로 $ SearchQuery을 사용할 수 없음).하지만 그 질문에 대한 답이라고 생각합니다.

관련 문제