@CeBePHblY

Не работает mysqli_data_seek, что не правильно?

есть такой самописный класс по работе с бд
//класс для работы с БД
	class DB
	{
        var $mysqliCnn='', $resQuery='', $rows='';

		//подключение к БД
		function connectOpen()
		{
			//подключение
			$this->mysqliCnn=mysqli_connect(CFG_DB_SERVER_IP, CFG_DB_USER_NAME, CFG_DB_USER_PASS, CFG_DB_NAME);
			//выбор кодировки
            mysqli_query($this->mysqliCnn,'SET NAMES "'.CFG_DB_CODE.'"');
		}

        //выполнение запроса к бд
        function query($query)
        {
            $this->resQuery=mysqli_query($this->mysqliCnn, $query);
            $this->rows = mysqli_fetch_assoc($this->resQuery);
            return $this->rows;
        }

        //закрытие подключения
        function connectClose()
        {
            mysqli_close($this->mysqliCnn);
        }

        //количество строк в результате
        function numRows()
        {
            return mysqli_num_rows($this->resQuery);
        }

        //переход в указанную строку результата
        function setRow($numRow)
        {
            mysqli_data_seek($this->resQuery,$numRow);
        }
	}

пробую перебрать результаты так
for ($indexMod=0;$indexMod<$db->numRows();$indexMod++)
		{
            //какую строку обрабатываем
            $db->setRow($indexMod);
			//ид подключения
			$idInclude=$allModule['id_rang'];
			//ид подключенного модуля в ранге
            $idModule=$allModule['rang'];
}

$db->numRows() возвращает правильное количество строк, цикл тоже выполняется это же количество раз, но при $db->setRow($indexMod); не происходит перемещения указателя. В чем причина?
  • Вопрос задан
  • 2271 просмотр
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Неправильно тут ВСЁ.
Но самое ужасное - это попытка натянуть на новую библиотеку методы работы, которые были популярны в прошлом веке.
Плюс хранение данных результата в классе - это классические же грабли.

В текущем виде этот класс не несет ни малейшего смысла. Надо его выкинуть и работать с mysqli напрямую. Для этого надо изучить примеры из документации.
После того как получится освоить базовые операции и понять назначение основных функций, можно будет потихоньку начинать пробовать писать свой класс.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
KorsaR-ZN
@KorsaR-ZN
Почему Вы не хотите использовать PDO, а строите свой велосипед?
Ответ написан
Комментировать
а где вы получаете данные эти ?
//ид подключения
$idInclude=$allModule['id_rang'];
//ид подключенного модуля в ранге
$idModule=$allModule['rang'];

как я вижу, вы только курсор меняете в setRow
и зачем вам for ?
раз уж на то пошло, добавьте метод себе в класс
function fetchRow() {
            return mysqli_fetch_row($this->resQuery);
}

и получайте через foreach или while данные
foreach( $db->fetchRow() as $row ){}
// или
while( $row = $db->fetchRow() ) {}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы