如果将列放入变量,则mssql_fetch_array仅显示一行

时间:2013-01-24 10:54:51

标签: php mysql

我仍然是一个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'];

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

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

3 个答案:

答案 0 :(得分:2)

您是否在循环中执行输出

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

如果你在循环中调用回声 ,每个结果集都会生成“他自己的”输出行。

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

答案 1 :(得分: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>";
}

答案 2 :(得分:1)

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