1

下面的查询将用于搜索脚本。出于某种原因,它不会返回任一条件为真的所有结果。我究竟做错了什么?

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

3 回答 3

3

您的循环会覆盖每个循环的值$nameand $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);

这是计算返回的行数,两次。再一次,没有必要。

于 2012-05-20T01:36:35.213 回答
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);
于 2012-05-20T01:40:22.983 回答
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/ )。

于 2012-05-20T04:04:57.523 回答