在MySQL查询中使用带有LIKE'%%'的PHP变量

 极神bd韵 发布于 2023-02-13 12:36

我正在为我的站点构建搜索功能,但是MySQl查询不会读取PHP变量,我也不是说错误,它似乎只是认为它们为NULL。

我当前的代码是:

$conn = mysql_connect('localhost', 'root', '');
        mysql_select_db('library', $conn);

        $sql = "SELECT * FROM Books";

        if($_POST['find']!="")
            {
                if($_POST['field'] == "Books")
                    {
                    $sql = "SELECT * 
                            FROM Books
                            JOIN bookauthor ON books.BookID = bookauthor.BookID
                            JOIN authors ON bookauthor.AuthorID = authors.AuthorID
                            WHERE books.BookName LIKE  '%''".($_POST['find'])."''%'
                            GROUP BY books.BookName                                
                            ORDER BY authors.AuthorID";
                    }
                else if ($_POST['field'] == "Authors")
                    {
                    $sql = "SELECT * 
                            FROM Books
                            JOIN bookauthor ON books.BookID = bookauthor.BookID
                            JOIN authors ON bookauthor.AuthorID = authors.AuthorID
                            WHERE authors.Forename LIKE  '%J.%'
                            AND authors.Surname LIKE  '%%'
                            GROUP BY books.BookName                                
                            ORDER BY authors.AuthorID";
                     }
            }

        $result = mysql_query($sql, $conn) or die("Can't run query");
        $loopnumber = 1;                            
        if (mysql_num_rows($result) ==0 ){echo "No Results have been found";}

POST变量确实包含通过回显测试过的数据,但是我的站点仅显示“未找到结果”消息,这意味着查询没有重新调整结果。即使我将POST传递给普通变量,我也会得到相同的结果。

但是,如果我删除了“ LIKE'%%'”,并通过在网站上键入搜索内容来查找和完全匹配,则效果很好。

编辑:嗯,就这样,所以我将POST传递到这样的变量中。

$searchf = "%".$_POST['find']."%";

并在WHERE LIKE中具有该变量使其起作用,现在我很好奇为什么它不能以其他方式起作用。

我似乎爱引号太多,应该上床睡觉。

1 个回答
  • 首先,我想您在尝试执行第一个查询时遇到MySQL语法错误。这行:

    WHERE books.BookName LIKE  '%''".($_POST['find'])."''%'
    

    应该

    WHERE books.BookName LIKE  '%".$_POST['find']."%'
    

    因为现在你正在

    WHERE books.BookName LIKE  '%''ABC''%'
    

    当你应该得到

    WHERE books.BookName LIKE  '%ABC%'
    

    我不允许您理解您对第二个查询的处理方式,这只是硬编码,并且%%作为搜索条件之一,从本质上讲是毫无意义的。

    2023-02-13 12:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有