我仍然是一个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'];
将显示与查询匹配的所有行。
我不确定为什么会这样。如果有人可以帮助我,那就太好了!
答案 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的每个循环中用新值重新分配变量。所以最终你得到了分配给变量的最后一个。你必须使用数组来保存值或在循环中回显它。