搜索脚本中的Mysql错误

时间:2014-07-24 21:42:33

标签: php 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';

我收到此错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在第1行的“AND MANStatus = 1”附近使用正确的语法。

我不明白为什么: - (

3 个答案:

答案 0 :(得分:2)

删除

开头的双引号
'"AND playerStatus = 1';
 ^---------------------------------here

并用空格替换它。

答案 1 :(得分:0)

除了额外的引号之外,您可能会在playerSex之前的“AND”或“WHERE”之后错过一个空格。它最终会像目前写的ANDplayerSex一样结束。

答案 2 :(得分: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作为变量)但我认为这是回答你的问题。