打开页面时 PHP 搜索显示整个数据库表

标签 php mysql search space

当我打开搜索页面时,

(1) 它立即显示所有结果(我的数据库中的每个条目。)

(2) 当使用空输入单击搜索按钮时,它还会显示我的数据库中的每个条目。

如何解决这个问题?任何帮助将不胜感激。

<form action="search.php" method="get">


<input type="text" name="k" size="50" value="<?php echo $_GET['k']; ?>"/>

<input type="submit" value="search" />


</form>
<hr color="white">

<?php

$k = $_GET['k'];
$terms = explode(" ", $k);

$query = "SELECT * FROM table WHERE ";

foreach ($terms as $each) {
    $i++;

    if ($i == 1)
        $query .= "keywords LIKE '%$each%' ";
    else
        $query .= "OR keywords LIKE '%$each%' ";
}

//connect
mysql_connect("localhost", "abc", "pass");
mysql_select_db("mydb");


$query = mysql_query($query);
$numrows = mysql_num_rows($query);
if ($numrows > 0) {

    while ($row = mysql_fetch_assoc($query)) {
        $id = $row['id'];
        $title = $row['title'];
        $link = $row['link'];
        $picture = $row['picture'];
        $keywords = $row['keywords'];
        $date = $row['date'];


    echo $row['title'];

    }

}
else
    echo "No results found for \"<b>$k</b>\"";

//disconnect
mysql_close();



?>

最佳答案

您的问题很可能出现在前几行中:

$k = $_GET['k'];
$terms = explode(" ", $k);

$query = "SELECT * FROM table WHERE ";

foreach ($terms as $each) {
    $i++;

    if ($i == 1)
        $query .= "keywords LIKE '%$each%' ";
    else
        $query .= "OR keywords LIKE '%$each%' ";
}

在运行 explode("", $k)$query 后检查您的 $terms 数组,然后再运行它。您必须检查以确保 foreach 语句中的 $each 元素至少不为空。

爆炸可能会在您的查询中放入空项目,因此您有:

`SELECT * FROM table WHERE keywords LIKE '%%'`

这将使任何其他OR关键字LIKE变得无用。

关于打开页面时 PHP 搜索显示整个数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19058008/

相关文章:

mysql - MySql 中的历史数据

mysql - 确保 MySQL 中的 auto_increment 值排序

c# - 获取字符串数组的连续元素的所有组合,同时保留剩余元素 C#

php - 如何在不删除 PHP 文件的现有数组值的情况下在文本文件中写入另一组新数组?

java - 从唯一字符串输入生成唯一 ID

php - 如何按文档 ID 对 sphinx 结果进行排序

python - 有没有办法将函数参数用作同一函数的另一个参数?

php - 在 HTML 表格中显示 php 数组

php - 将 Woocommerce 结账状态字段设置为必填字段

php - 在字符串中的美元符号后使用花括号是否错误