2016-01-10 2 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

Смежные вопросы