2016-01-10 152 views
1

我有一个函数,它需要一个SQL查询和参数/参数数组。此函数在UPDATE语句上正常工作,但不在SELECT语句中。函数mysqli_fetch_array未返回任何内容,我找不到原因。我得到的错误信息是;SQL函数不返回结果

“mysqli_fetch_array()预计参数1被mysqli_result,布尔给”

我使用的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>"; 
              }       
     ?> 

回答

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

为什么OP应该将查询改为执行某些不同的事情?问题中的查询(大概)是正确的,问题在于其他地方。 –

+0

的确如此,它可能会有所不同。如果您使用此查询OP,请谨慎使用它。结果取决于您的数据库设计。如果不确定,最好使用先前的查询。 – jozhe

0

你可以返回$stmt->get_result()相反,它会为您提供您可以遍历结果。

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

+0

get_result()提供了一个新的错误 - “调用未定义的方法mysqli_stmt :: get_result()” – user3034845

+0

我很抱歉,我不是故意直接插入到代码中。我的意思是它会给你一些你可以迭代的东西。点击'$ stmt-> get_result()'上的文档链接,你会明白我的意思。 – HenryTK