php/mysqli Illegal offset type

V
На сайте с 10.01.2012
Offline
85
518

Имеется строка вида:

$columns = $db->GetCol('table_name');

Ну и сама функция:

function GetCol($table) {

$columns = array();

$result = $this->Query('DESCRIBE #', array($table));

$field = mysqli_fetch_field_direct($result, 0);

while( $column = $this->NextRow($result) ){
$columns[] = $column[$field];
}

...

return $columns;
}

При обращении к этой ф-ии получаю ошибку Illegal offset type.

Можете помочь разобраться что не так?

S
На сайте с 30.09.2016
Offline
469
#1

Функция получает не тот тип данных, которые ожидает получить. Подозреваю, что из-за того, что $column[$field] - это элемент массива, а $field - это объект. Такого быть не должно.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
V
На сайте с 10.01.2012
Offline
85
#2

Методом "произвольных" попыток посмотреть что получаем после каждой операции обнаружил, что если после

$result = $this->Query('DESCRIBE #', array($table));

добавить

while($result->fetch_assoc()) {}

проблема решается, но почему - так и не понял...

S
На сайте с 30.09.2016
Offline
469
#3
Varenik:
Методом "произвольных" попыток

Надо не произвольные попытки делать, а осмысленно программировать. Иначе

Varenik:
так и не понял...
так и не поймёте, что получилось в результате.
V
На сайте с 10.01.2012
Offline
85
#4

За что отвечает данная ф-я я то понимаю, но в данном случае нет никаких манипуляций с извлеченным массивом. И пытаюсь понять как же это повлияло...

P.S. Переписываю класс, написанный под php 5.4

M
На сайте с 04.12.2013
Offline
223
#5

Вам сразу написали, что mysqli_fetch_field_direct возвращает объект. Нефиг пытаться этим значением индексировать элемент массива.

проблема решается, но почему - так и не понял...

Указатель итератора загнали за последний элемент. Следующий цикл while уже выполняться не будет. Ф-ция вернет пустой массив. Если конечно NextRow и ... кардинально не поменяют ситуацию.

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий