我正在为我的站点构建搜索功能,但是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中具有该变量使其起作用,现在我很好奇为什么它不能以其他方式起作用。
我似乎爱引号太多,应该上床睡觉。
首先,我想您在尝试执行第一个查询时遇到MySQL语法错误。这行:
WHERE books.BookName LIKE '%''".($_POST['find'])."''%'
应该
WHERE books.BookName LIKE '%".$_POST['find']."%'
因为现在你正在
WHERE books.BookName LIKE '%''ABC''%'
当你应该得到
WHERE books.BookName LIKE '%ABC%'
我不允许您理解您对第二个查询的处理方式,这只是硬编码,并且%%
作为搜索条件之一,从本质上讲是毫无意义的。