当我搜索我在数据库中指定的关键字时,它将返回我数据库中的所有内容,而不仅仅是链接附加关键字的相应链接。这是我的代码
<?php
$q = $_GET['q'];
$terms = explode(" ", $q);
$query = "SELECT * FROM search ";
foreach ($terms as $each){
$i=0;
$i++;
if ($i == 1)
$query .= "keywords LIKE '%$each%' ";
else
$query .= "OR keywords LIKE '%$each%' ";
}
//connect
mysql_connect("localhost", "root", "");
mysql_select_db("search");
$query = mysql_query("SELECT * FROM search");
$numrows = mysql_num_rows($query);
if ($numrows > 0){
while($row = mysql_fetch_assoc($query)){
$id = $row['id'];
$title = $row['title'];
$description = $row['description'];
$keywords = $row['keywords'];
$link = $row['link'];
echo "<h3><a href='$link'>$title</a></h3><h4>$link</h4>$description<br /><br />";
}
}
else
echo "<b>No Results Found</b><br><br>Suggestions:<br>
Make sure all words are spelled correctly.<br>
Try different keywords.<br>
Try more general keywords.";
//disconnect
mysql_close();
?>
答案 0 :(得分:1)
<?php
$q = $_GET['q'];
$terms = explode(" ", $q);
//connect
mysql_connect("localhost", "root", "");
mysql_select_db("search");
$query = "SELECT * FROM search ";
$i=1;
foreach ($terms as $each){
if ($i == 1) {
$query .= "WHERE ";
$query .= "keywords LIKE '" . mysql_real_escape_string("%" . $each . "%") . "' ";
} else {
$query .= "OR keywords LIKE '" . mysql_real_escape_string("%" . $each . "%") . "' ";
}
$i++;
}
$query = mysql_query($query);
$numrows = mysql_num_rows($query);
if ($numrows > 0){
while($row = mysql_fetch_assoc($query)){
$id = $row['id'];
$title = $row['title'];
$description = $row['description'];
$keywords = $row['keywords'];
$link = $row['link'];
echo "<h3><a href='$link'>$title</a></h3><h4>$link</h4>$description<br /><br />";
}
} else {
echo "<b>No Results Found</b><br><br>Suggestions:<br>
Make sure all words are spelled correctly.<br>
Try different keywords.<br>
Try more general keywords.";
}
//disconnect
mysql_close();
?>
修正:
1)删除了正在定义的第二个$查询。它选择了所有行。
2)移动了初始$ i声明。每个循环都被设置为0。
3)添加WHERE
4)在if语句后移动$ i ++并将初始$ i设置为1。
5)添加了mysql_real_escape_string,以便正确转义数据。
建议:
我强烈建议您查看MySQLi(http://us2.php.net/mysqli)或PDO(http://us3.php.net/pdo)
如果有效,或者您需要进一步的帮助,请告知我们。
答案 1 :(得分:0)
第一眼,我看到了几个错误。
$i=0;
$i++;
if ($i == 1)
$ i将永远是一个人。 你可能想要移动$ i = 0;在foreach之前
$query = mysql_query("SELECT * FROM search");
您构建了一个查询,但最终您没有使用它。你可能想这样做:$ query = mysql_query($ query);代替。 (以及使用输出的不同变量名称的代码清晰度?)。
不推荐使用mysql_query。没用你就赶紧行,查看PDO
答案 2 :(得分:0)
首先,您在条件之前错过了WHERE
关键字。所以它应该是:
foreach ($terms as $i => $each){
$each = mysql_real_escape_string($each); // Prevent SQL injection
if ($i == 0)
$query .= "WHERE keywords LIKE '%$each%' ";
else
$query .= "OR keywords LIKE '%$each%' ";
}
您不需要递增自己的计数器变量,您可以使用$terms
中的数组索引。
其次,在创建$query
的所有工作之后,您还没有使用它。你写道:
$query = mysql_query("SELECT * FROM search");
应该是:
$query = mysql_query($query);
顺便说一句,重复使用这样的变量通常是一个坏主意,当你为不同的事情使用相同的变量时会让人感到困惑。我建议你拨打$query
之类的第二个$results
。
答案 3 :(得分:0)
更改此行
$query .= "keywords LIKE '%$each%' ";
通过
$query .= " Where keywords LIKE '%$each%' ";
并且还要改变这一行
$query = mysql_query("SELECT * FROM search");
通过
$query = mysql_query($query);