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

Ver*_*nix 1 php mysql where

我正在为我的站点构建搜索功能,但是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";}
Run Code Online (Sandbox Code Playgroud)

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

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

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

$searchf = "%".$_POST['find']."%";
Run Code Online (Sandbox Code Playgroud)

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

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

Mik*_*ant 5

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

WHERE books.BookName LIKE  '%''".($_POST['find'])."''%'
Run Code Online (Sandbox Code Playgroud)

应该

WHERE books.BookName LIKE  '%".$_POST['find']."%'
Run Code Online (Sandbox Code Playgroud)

因为现在你正在

WHERE books.BookName LIKE  '%''ABC''%'
Run Code Online (Sandbox Code Playgroud)

当你应该得到

WHERE books.BookName LIKE  '%ABC%'
Run Code Online (Sandbox Code Playgroud)

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