0

我仍然是 PHP 新手,所以如果这很简单,我深表歉意。

我正在使用 PHP 和 mySQL 为网站创建一个相当基本的搜索工具。我已经连接到数据库,选择了数据库,查询了表并获取了表列;

$k = htmlspecialchars($_GET['k']); // Get search query

$select = mssql_query("SELECT * FROM search WHERE Title Like '%" . $k . "%'");

if( mssql_num_rows($select) < 1) {

$noResults = 'No results found for <b>' . $k . '</b>, <label for="k">Please try again.</label>';

} else {

while ($results = mssql_fetch_array($select)) {

    $title = $results['Title'];
    $link = $results['Link'];
    $description = $results['Description'];

}

}

当我将 $results[''] 列放入变量中,然后尝试像这样回显每个变量时;

             if( isset($noResults)) {

                echo $noResults;

            } else { 

                echo '<li>' . '<h2>' . '<a href="' . $link . '" title="' . $title . '">' . $title . '</a>' . '</h2>' . '<p>' . $link . '</p>' . '<p>' . $description . '</p>' . '</li>'; 

             }

但是,它只回显与该查询匹配的一行,如果我只是简单地回显这样的列;

    echo $results['Title'];
    echo $results['Link'];
    echo $results['Description'];

将显示与查询匹配的所有行..

我不确定为什么会这样。如果有人可以帮助我,那就太好了!

4

3 回答 3

2

while循环中执行输出吗?

如果您执行 while 循环并在此之后调用 echo,每个结果集将覆盖前一个结果集,并且 echo 将输出获取的最后一个结果集。

如果Loop 中调用 echo,每个结果集都会生成“他自己的”输出行。

如果您想将每个结果集保存在一个变量中,您可以使用一个数组,该数组在循环前面声明并在循环中填充。

于 2013-01-24T11:07:41.847 回答
2

您需要使用循环:

$k = mysql_real_escape_string($_GET['k']); // Get search query

$select = mssql_query("SELECT * FROM search WHERE Title Like '%" . $k . "%'");

if( mssql_num_rows($select) < 1) {

    $noResults = 'No results found for <b>' . $k . '</b>, <label for="k">Please try again.</label>';

} else {
    $results= array();
    while ($result = mssql_fetch_array($select)) {
        $results[]= $result;
    }

}

if( isset($noResults)) {

    echo $noResults;

} else { 
    echo "<ul>";
    foreach($results as $result){
        echo '<li>' . '<h2>' . '<a href="' . $result['link'] . '" title="' . $result['title'] . '">' . $result['title'] . '</a>' . '</h2>' . '<p>' . $result['link'] . '</p>' . '<p>' . $result['description'] . '</p>' . '</li>'; 
    }
    echo "</ul>";
}
于 2013-01-24T11:11:58.520 回答
1

您的问题中有些事情尚不清楚,但我假设您在检查循环外正在回显变量isset($noResults)。这意味着您正在为每个 while 循环中的变量重新分配新值。所以最终你得到分配给变量的最后一个。您必须使用数组来保存值或在循环中回显它。

于 2013-01-24T11:14:30.080 回答