【问题标题】:PHP MySQL search not returning resultsPHP MySQL搜索不返回结果
【发布时间】:2013-11-26 14:52:02
【问题描述】:

我创建了一个 php 搜索脚本来搜索 MySQL 数据库,但没有搜索返回结果。

表格代码

<form method="post" action="search.php">
<input type="text" value="Search..." name="query" />
<input type="submit" value="Find" name="completedsearch" />
</form>

PHP 脚本

<?php
                    if(isset($_POST['completedsearch']))
                    {
                            $term = $_POST['query'];
                            $mysql = mysql_connect("localhost","searchuser","password");
                            mysql_select_db("hcsd");
                            $qu = mysql_query("SELECT * FROM your_table WHERE COMPANY LIKE '%{$term}%' OR LOCATION LIKE '%{$term}%' OR KEYWORDS LIKE '%{$term}%' OR PRODUCTSSERVICES LIKE '%{$term}%' ");
                            echo "
                                            <th>Name</th>
                                            <th>Location</th>
                                            <th>Products/Services</th>
                                            ";
                            while($row = mysql_fetch_array($qu))
                                       {

                                            echo "<tr><td>";  
                                            echo $row['COMPANY'];
                                            echo "</td>";
                                            echo "<td>";
                                            echo $row['LOCATION'];
                                            echo "</td>";
                                            echo "<td>";
                                            echo $row['PRODUCTSSERVICES'];
                                            echo "</tr></td>";
                            }
                    }
            ?>

MySQL 数据库有 4 列,标题为 COMPANY、LOCATION、KEYWORDS 和 PRODUCTSSERVICES,此脚本应搜索任何列的搜索词,然后显示表中任何匹配行的 COMPANY、LOCATION 和 PRODUCTSSERVICES,但即使使用我知道 100% 都在 MySQL 表中的搜索词,我仍然没有收到任何结果。

【问题讨论】:

  • 摘掉花括号:Like '%$term%'
  • 看看这个:SQL Injection
  • 最后,您交换了 和 ,我认为它应该回显“” - 您可能需要查看生成的 html 代码
  • 去掉了大括号,仍然没有返回结果
  • 您从中选择的表真的叫“your_table”吗?

标签: php mysql sql


【解决方案1】:

我不确定花括号在这里是否有帮助...

替换

 $qu = mysql_query("SELECT * FROM your_table WHERE COMPANY LIKE '%{$term}%' OR LOCATION LIKE '%{$term}%' OR KEYWORDS LIKE '%{$term}%' OR PRODUCTSSERVICES LIKE '%{$term}%' ");

 $qu = mysql_query("SELECT * FROM your_table WHERE COMPANY LIKE '%".$term."%' OR LOCATION LIKE '%".$term."%' OR KEYWORDS LIKE '%".$term."%' OR PRODUCTSSERVICES LIKE '%".$term."%'");

你也应该转义输入

 $qu = mysql_query("SELECT * FROM your_table WHERE COMPANY LIKE '%".mysql_real_escape_string($term)."%' OR LOCATION LIKE '%".mysql_real_escape_string($term)."%' OR KEYWORDS LIKE '%".mysql_real_escape_string($term)."%' OR PRODUCTSSERVICES LIKE '%".mysql_real_escape_string($term)."%'");

还可以考虑使用更新的 mysqli_ 函数

【讨论】:

  • 接受了这个答案,因为帮助添加了输入转义,@Chris Wheeler 在上面的评论中回答了我的问题。
  • +1 以改进此请求。我最好的方法是使用 PDO 并使用准备请求或最近的 mysqli,正如@Chris Wheeler 建议的那样。它更安全。 PHP 文档推荐:php.net/manual/fr/function.mysql-escape-string.php
  • 这不是“附加安全性”,而是正确编写。如果用户数据中包含'等字符,则无法逃脱将导致各种错误。
【解决方案2】:

你的桌子叫什么名字?

您应该在 phpmyadmin 或您用于管理数据库的任何软件中尝试您的请求并查看结果。如果没有结果,您的请求可能有错误。

【讨论】:

  • 表叫Sheet1 没想到,我试试
  • +1 用于询问表名,比我想的要早一点:)
猜你喜欢
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 2012-09-28
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多