Предполагая, что объект mysqli уже создан (и связан) с глобальной переменной $ mysql, вот код, с которым я пытаюсь работать.
class Listing {
private $mysql;
function getListingInfo($l_id = "", $category = "", $subcategory = "", $username = "", $status = "active") {
$condition = "`status` = '$status'";
if (!empty($l_id)) $condition .= "AND `L_ID` = '$l_id'";
if (!empty($category)) $condition .= "AND `category` = '$category'";
if (!empty($subcategory)) $condition .= "AND `subcategory` = '$subcategory'";
if (!empty($username)) $condition .= "AND `username` = '$username'";
$result = $this->mysql->query("SELECT * FROM listing WHERE $condition") or die('Error fetching values');
$this->listing = $result->fetch_array() or die('could not create object');
foreach ($this->listing as $key => $value) :
$info[$key] = stripslashes(html_entity_decode($value));
endforeach;
return $info;
}
}
В БД есть несколько сотен спискови когда я вызываю $ result-> fetch_array (), он помещает в массив первую строку в БД.однако, когда я пытаюсь вызвать объект, я не могу получить доступ больше, чем к первой строке.например: $ list_row = новый список;while ($ list = $ list_row-> getListingInfo ()) {echo $ листинг [0];}
это выводит бесконечный цикл одной и той же строки в БД.Почему он не переходит к следующему ряду?если я перемещаю код:
$this->listing = $result->fetch_array() or die('could not create object');
foreach ($this->listing as $key => $value) :
$info[$key] = stripslashes(html_entity_decode($value));
endforeach;
, если я перемещаю это за пределы класса, он работает точно так, как ожидалось, выводя строку за один раз при циклическом выполнении оператора while.Есть ли способ написать это так, чтобы я мог сохранить вызов fetch_array () в классе и по-прежнему циклически перебирать записи?