PHP复杂搜索

时间:2014-10-27 22:24:52

标签: php mysql

情境:

所以早些时候,我提出了一个请求,询问如何转换我的四个简单搜索查询的方法:

“姓名”,“价格”,“可用性”和“类别

进入一个复杂搜索,将所有这些数据库表都考虑在内。

我认为我设法最终构建了一个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查询突然起作用,但是它没有做它本来要做的事情并限制页面上显示的结果。

1 个答案:

答案 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)的输出。