2014-07-24 45 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; 

顯示玩家根據性別,但如果我補充一下:

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

我得到這個錯誤:

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.

我不明白爲什麼: - (

+0

我建議呼應'$ searchQuery'。我懷疑它看起來不像你想象的那樣。 – andrewsi

+1

用空格替換''' –

+1

您可能還想考慮將每個單獨的搜索選項放入一個數組中;然後對該數組進行插值以生成您的SQL語句,這使代碼更容易維護,並且更容易閱讀。 – andrewsi

回答

2

刪除雙引號

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

並將其替換爲空格。

0

除了額外的引號,看起來您可能會在playerSex之前的「AND」或「WHERE」之後缺少一個空格。它將會像目前編寫的ANDplayerSex一樣結束。

+0

謝謝你的回答。我忘了帶引號。 – user3607990

0

該代碼有許多可能的問題。

的第一件事是:

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

你沒有把空間WHERE之前,所以這取決於$searchQuery前面部分可能無法正常工作 - 你應該在這裏補充的空間。

同樣是在使用所有其他部分:

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

在這裏您還沒有WHERE前把空間 - 你應該這樣做。

導致問題的最後一件事是:

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

你以後playerSex =

錯過這裏的雙引號(")所以最終的代碼也許應該是這樣的:

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'; 
} 

編輯我故意錯過了你的問題的一部分,因爲它似乎你把他重新出現錯誤(例如,你不能使用$ SearchQuery作爲變量),但我認爲這就是你要求的答案。