SQL函数不返回结果

时间:2016-01-10 10:31:33

标签: php mysql sql prepared-statement

我有一个函数,它接受SQL查询和参数/参数数组。此函数在UPDATE语句上正常工作,但在SELECT语句上没有。函数mysqli_fetch_array没有返回任何内容,我无法弄清楚原因。我得到的错误信息是;

  

" mysqli_fetch_array()期望参数1为mysqli_result,boolean given"

我使用的是PHP 5.5版。

查询如下:

<?php

        $txtSearch = isset($_POST["txtSearch"]) ? $_POST["txtSearch"] : "";

            $result_search = null;
            $query = "";
            if(!empty($txtSearch))
            {
                if($page == "adverts")
                {
                    $query = "
                        SELECT
                            A.ID,
                            A.title,
                            A.productname,
                            A.price,
                            A.description,
                            A.productlocation,
                            (SELECT I.name FROM image I WHERE I.advertID = A.ID LIMIT 1) AS name
                        FROM advert A
                        WHERE A.title LIKE ?";
                }
                $result_search = queryDB($query, array("s", "%".$txtSearch."%"));
            }
           while($row = mysqli_fetch_array($result_search))
                {

                                                echo 
                                                    "<div class='post_container'>
                                                            <div class='title_banner'>".$row["title"]."</div>
                                                            <div>£".$row["price"]."</div>
                                                    </div>";
                                            }                           
        ?>

2 个答案:

答案 0 :(得分:0)

在将查询结果作为参数传递之前,请尝试检查查询结果。如果它返回false,则查询有问题。

if($result_search === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

我会改变你的查询:

SELECT
    A.ID, A.title, A.productname,
    A.price, A.description,
    A.productlocation,
    I.name
FROM 
    advert A
INNER JOIN
    image I ON I.advertID = A.ID
WHERE 
    A.title LIKE ?"

答案 1 :(得分:0)

您可以返回$stmt->get_result(),这将为您提供可以迭代的结果。

您的错误告诉您正在返回布尔值,而不是mysqli_result。 mysqli_stmt::fetch()上的文档确认它返回一个布尔值。