搜索两个表的迷你PHP搜索引擎

时间:2012-06-14 03:23:02

标签: php mysql search

我正在尝试创建一个迷你PHP搜索引擎,只需在两个不同的表中搜索,并在另一个表下显示一个表的结果。但是我收到了一个错误。这是我设置查询的地方。

$var = $_GET['q']; 
$trimmed = trim($var);
$get_fighters = "
SELECT * 
FROM fighters 
WHERE name LIKE '%$trimmed%' 
ORDER BY name ASC";
$get_events = "
SELECT * 
FROM events 
WHERE event_name LIKE '%$trimmed%' 
ORDER BY date DESC";
$search_result_fighters = mysql_query($get_fighters); 
$search_result_events = mysql_query($get_events); 
$check_results_fighters = mysql_num_rows($search_result_fighters); 
$check_results_events = mysql_num_rows($search_result_events); 

这是我返回战士(有效)的地方

if ($check_results_fighters == 0) {
    echo "<tr>";
    echo "<td colspan='6'>" . "No Fighters Found." . "</td>";
    echo "</tr>";
}
else if ($check_results_fighters != 0) {
    while($row = mysql_fetch_array($search_result_fighters)) {
      echo "<tr>";
      echo "<td>" . $row['name'] . "</td>";
      echo "</tr>";
    } 
}

这是我返回活动的地方,但它不起作用。我收到错误:警告:mysql_num_rows()期望参数1是资源,布尔值在第30行的C:\ xampp \ htdocs \ search.php中给出

if ($check_results_events == 0) {
    echo "<tr>";
    echo "<td colspan='6'>" . "No Events Found." . "</td>";
    echo "</tr>";
}
else if ($check_results_events != 0) {
    while($row = mysql_fetch_array($search_result_events)) {
      echo "<tr>";
      echo "<td>" .  $row['event_name'] . "</td>";
      echo "</tr>";
    } 
}

第30行就是这样:

$check_results_events = mysql_num_rows($search_result_events); 

2 个答案:

答案 0 :(得分:2)

在SQL查询中出现错误的地方抛出该错误。成功的SQL查询返回一个资源,该资源可用作mysql_num_rows()的参数。失败的SQL查询返回一个布尔false,它不是mysql_num_rows()的有效参数,因此出错。

仔细检查表结构,字段名称和SQL查询。

要进行其他调试,请执行以下操作:

$search_result_events = mysql_query($yourQuery) or die(mysql_error());

这将输出MySQL抛出的错误。

<强>图片的标题说明

没有必要这样做

if ($check_results == 0) {
} 
// the if condition here is redundant, don't you agree?
else if ($check_results != 0) {
}

虽然额外比较的性能损失非常非常非常微小,但它会抛弃可能会读取您代码的人。

另外,请停止使用mysql_功能。 Here's a brilliant tutorial on PDO。你应该使用它。

答案 1 :(得分:0)

根据您的其他question中的表格结构,“日期”应该是您的事件表中的“event_date”:

$get_events = "
SELECT * 
FROM events 
WHERE event_name LIKE '%$trimmed%' 
ORDER BY event_date DESC";