2016-02-21 2 views
0

Так что я пытаюсь запросить таблицу базы данных, которая имеет около 1000 записей, и я пытаюсь получить строки из таблицы ($ subject) на основе, если определенный столбец (тема) является одним из значений определенного массива ($ themes).WHERE column_name IN Array(), возвращающий пустой массив

поэтому моя функция выглядит так.

public static function find_records($subject="", $topics=[]){ 

     global $database; 

     foreach($topics as $key => $topic) { 
      $topics[$key] = $database->escape_value($topic); 
     } 

     $newtopics = join("','", $topics); 
     $sql = "SELECT * FROM ".$subject." WHERE topic IN ('$newtopics')"; 

     $result_set = $database->query($sql); 

     $object_array = array(); 
     while ($row = $result_set->fetch_array()) { 
     $object_array[] = $row; 
     } 

     return !empty($object_array) ? $object_array : false; 
} 

У меня есть класс базы данных, который обрабатывает все запросы и функции экранирования, он использует mysqli. my $ object_array пуст, когда возвращается классу, который вызвал этот метод. Я попытался отобразить каждую строку $ из цикла while, и он работал, но при выходе из цикла while объект $ object_array не дает ничего, кроме «[]». Я думаю, что это имеет какое-то отношение к разделу «WHERE topic IN array», потому что другие запросы работают нормально на этом методе.

+0

Не то, чтобы количество столбцов или «полей» здесь имеет значение, но обратите внимание, что присутствие 1000 столбцов иногда является симптомом плохого дизайна. – Strawberry

+0

Какова ценность '$ subject' в этом случае? – RamRaider

+0

@RamRaider Значение «спорт» может быть передано, так как есть много предметов –

ответ

0

В вашем while цикле изменить

$row = $database->fetch_array($result_set) 

в

$row = $result_set->fetch_array() 

$database является экземпляр по mysqli объекта, в то время как вам нужно mysqli_result экземпляр на самом деле принести результаты с.

+0

Меняю это, я не получаю ответа. но его смешной cos на «echo $ row»; внутри цикла while я получаю около 8 записей, которые выплевываются. –

+0

по-прежнему такой же результат. –

+0

Не могли бы вы показать свой измененный код в своем вопросе? Трудно сказать, что происходит, не видя этого. (Оставьте остальную часть своего вопроса как есть, просто добавьте измененный код в конец.) –

0

Так же, как и в сторону почти, чтобы показать, что SQL действительно правильный (это не должно быть решение проблемы - хотя, возможно, $ предмет может бросать вещи)

/* example data */ 
$subject='cars'; 
$topics=array('size','shape','colour','weight'); 

$newtopics = join("','", $topics); 
$sql = "SELECT * FROM `".$subject."` WHERE `topic` IN ('$newtopics');"; 
echo $sql; 

will output 
SELECT * FROM `cars` WHERE `topic` IN ('size','shape','colour','weight'); 
+0

Да sql показывает именно это. –

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