情境:
所以早些时候,我提出了一个请求,询问如何转换我的四个简单搜索查询的方法:
“姓名”,“价格”,“可用性”和“类别”
进入一个复杂搜索,将所有这些数据库表都考虑在内。
我认为我设法最终构建了一个SQL查询,该查询将我的所有类别都考虑在内,并且我在php_myadmin中测试了查询,它似乎也可以正常工作。
问题:
我的问题是,我在尝试运行代码时似乎遇到错误,我认为这与我的新SQL查询无关,所以我不知道是什么。
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\Users\Method\Desktop\MethodProject\Server\htdocs\PerfectoWebsite\SearchByAllCriteria.php on line 117
我的错误想要mysqli_result作为参数并获取布尔值,尽管此代码适用于 所有 我的其他搜索到目前为止没有错误,所以在此代码导致错误之前,我确实非常肯定。
我已经设法弄清楚错误是在PHP的这一部分,我只是不确定在哪里:
<?php include "ConnectToServer.php" ?>
<?php include "ConnectToDatabase.php" ?>
<?php
//check to make sure the form has been submitted and retrieve the contents of
//both things and make variables.
if(isset($_POST['search'])){
$get_price=$_POST['price'];
$get_function=$_POST['Operation'];
$get_name=$_POST['UserEnteredText'];
$get_Availability=$_POST['AvailabilityOperation'];
$get_Category=$_POST['CategoryOperation'];
//create the query to extract the data from the table and store
//the SQL query in a variable called $query
/*$query="SELECT * FROM friends WHERE name = '$get_name'";*/
$query="SELECT * FROM product WHERE price $get_function $get_price
AND SELECT * FROM product WHERE avaliability = $get_Availability
AND SELECT * FROM product WHERE category = $get_Category
AND SELECT * FROM product WHERE product name = $get_name";
//the result set of the mysql_query function is then stored in
//an array called $result
$result=mysqli_query($connection, $query);
//create while loop and loop through result set, reading each one
//and displaying it through the use of an echo command
>>>line 117<<<while ($row = mysqli_fetch_array($result)) {
和以前一样,我非常感谢你的帮助,我在这方面几乎都是一个菜鸟,我真的很想知道为什么这些错误会发生,所以我可以在将来阻止它们。
感谢。
[编辑]:
我补充说:
var_dump($query);
当我从现在开始提交搜索时,我得到:
string(225) "SELECT * FROM product WHERE price < '5001' UNION SELECT * FROM product WHERE availability = 'Now' UNION SELECT * FROM product WHERE category = 'Garden' UNION SELECT * FROM product WHERE product name like '%a%'"
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\Users\Method\Desktop\FionaProjectMeta\Server\htdocs\PerfectoWebsite\SearchByAllCriteria.php on line 120
仍然看不到错误。
[编辑2]:
好的,错误出现在这两行中的一行/两行中:
UNION SELECT * FROM product WHERE category = '$get_Category'
UNION SELECT * FROM product WHERE product name like '%$get_name%'";
只是不确定在哪里。
[编辑3]:
我不再收到错误,一旦我将“产品名称”放在引号中我的SQL查询突然起作用,但是它没有做它本来要做的事情并限制页面上显示的结果。
答案 0 :(得分:0)
查询错误。你应该使用UNION。 UNION让您将多个SELECT语句的结果组合在一起。在这种情况下,您可以运行这一个查询,并使用所有记录返回一个结果集,而不是运行4个单独的查询并返回4个不同的结果集。您应该简化查询,而不是联合。在这种情况下无需使用UNION。只需将其全部放入1个SELECT查询中。
UNION将返回一个不同的结果集,因此不会重复。如果您想要所有记录,无论是否重复,请使用UNION ALL。
您还需要将变量包装在引号中。看一下您尝试运行的查询。执行var_dump($query);
并查看输出结果。
$query = "SELECT * FROM product WHERE price $get_function $get_price OR avaliability = '$get_Availability' OR category = '$get_Category' OR product name = '$get_name'";
如果您仍未获得结果,则应查看任何错误。在运行查询后查看mysqli_error($connection)
的输出。