为什么此查询仅显示一个结果?

时间:2012-05-20 01:32:44

标签: php search

以下查询将用于搜索脚本。由于某种原因,如果条件为真,它将不会返回所有结果。我做错了什么?

$sql = "SELECT name, id_code from codes WHERE name LIKE '%$q%' OR id_code 
LIKE '%$q%'";

$result = mysql_query($sql);

$query = mysql_query($sql) or die ("Error: ".mysql_error());

$num_rows1 = mysql_num_rows($result);

if ($result == "")
{
echo "";
}
echo "";


$rows = mysql_num_rows($result);

if($rows == 0)
{
print("<div id=norequests>No results for <strong>$q</strong></div>");

}
elseif($rows > 0)
{
while($row = mysql_fetch_array($query))
{

$name = htmlspecialchars($row['name']);
$code = htmlspecialchars($row['id_code']);

}

print("$code: $name<br /> <br />");
}

}


else{
    echo '<div id="error">No results for $q.</div>';
}

3 个答案:

答案 0 :(得分:3)

你的循环会在每个循环中覆盖$name$code的值,所以你最终看到的就是最后一个循环的值。

while( $row = mysql_fetch_array( $query ) ) {
  $name = htmlspecialchars($row['name']);
  $code = htmlspecialchars($row['id_code']);
}

您可以在循环中echo这些值,或者将它们推送到某个地方的集合中:

while ( $row = mysql_fetch_array( $query ) ) {
  $names[] = htmlspecialchars( $row["name"] );
  $codes[] = htmlspecialchars( $row["id_code"] );
}

或者您可以将两个值都放在一个数组中:

$set = array();
while ( $row = mysql_fetch_array( $query ) ) {
  $set[] = array( 
    "Name" => htmlspecialchars( $row["name"] ),
    "Code" => htmlspecialchars( $row["id_code"] )
  );
}

此时,您已将所有名称和代码加载到数组(或 数组)中,可以在循环运行后对其进行操作。

print_r( $names ); // or $set

冗余操作

此外,您还有一些冗余代码:

$result = mysql_query($sql);
$query  = mysql_query($sql) or die ("Error: ".mysql_error());

这会运行您的查询两次 - 不需要。

$num_rows1 = mysql_num_rows($result);
$rows = mysql_num_rows($result);

这是计算返回的行数,两次。再一次,不需要那样。

答案 1 :(得分:1)

您正在while之外打印。这意味着,无论你有多少结果,只会打印一个。

在循环内打印

while($row = mysql_fetch_array($query))
{
    $name = htmlspecialchars($row['name']);
    $code = htmlspecialchars($row['id_code']);
    print("$code: $name<br /> <br />");
}

或在循环时收集数组中的变量,并在循环后使用它们

$result_array = array();
while($row = mysql_fetch_array($query))
{
    $name = htmlspecialchars($row['name']);
    $code = htmlspecialchars($row['id_code']);

    $result_array[] = array(
        'name' => $name,
        'code' => $code
    );
}
print_r($result_array);

答案 2 :(得分:0)

你真的不应该使用MySQL进行全文搜索(参见:http://en.wikipedia.org/wiki/Full_text_search)。相反,请考虑使用MySQL的全文功能:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html。或者甚至可能更好,使用像Lucene这样的“真实”全文搜索引擎(参见:http://lucene.apache.org/)或Sphinx(参见:http://sphinxsearch.com/)。