Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Проблема с mysqli_free_result()
Fatal error: Call to a member function free() on a non-object in Z:\home\webpage.com\www\func_123.php on line 76
Что то не могу понять в чем дело , данные добавляются В БД .
Дальше, наверное, уже не возвращается "ответ" о результате выполнения запроса из БД или не присваеваетя объект в переменную $result , а другое больше ничего не могу придумать .
Главное , что в другом сценарии эта "комбинация" работает без проблем у меня.
Может кто то уже сталкивался с подобной прблемой ?
JustUserR
Отправлено: 17 Июня, 2009 - 16:04:17
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Ну ошибка явно не в mysqli_free_result а в вашем классе
Зачему чт в разных версиях PHP классы ведут себя поразному
Вероятно вы забыли указать префикс $this-> когда в вашем методе указывали идентификатор соединения с базой данныз
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
RomAndry
Отправлено: 17 Июня, 2009 - 16:09:51
Частый посетитель
Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008
Помог: 6 раз(а)
перевод говорит, что free() функции не существует или не подключена должным образом
vitaliy_mad
Отправлено: 17 Июня, 2009 - 16:21:29
Участник
Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008 Откуда: Украина, Мариуполь
Помог: 0 раз(а)
RomAndry пишет:
что free() функции не существует или не подключена должным образом
нет ошибка говорит о том что функция применена не на объекте, т.е. $result - неявляется объектом
Покинул форум
Сообщений всего: 58
Дата рег-ции: Февр. 2009
Помог: 0 раз(а)
JustUserR пишет:
Вероятно вы забыли указать префикс $this-> когда в вашем методе указывали идентификатор соединения с базой данныз
Я соединяюсь с БД прямо из сценария .
Я думаю, может проблемма в самом файле, но я вроде всё по правилам написал.
Складывается такое впечатление , что если перепиши этот код в точности до запятой в другом php файле то он заработает
RomAndry пишет:
перевод говорит, что free() функции не существует или не подключена должным образом
Это понятно , вопрос - почему не существует или как это подключить долным образом , ведь если бы из БД не было ответа что запрос обработан без проблем ,то во время проверки в сценарии выдалобы 'erorr' и 'exit;'
Может мне использовать просто $db->close() ? Тогда, не останется ли в памяти уже не нужный объект $result ?
Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, boolean given in Z:\home\webpage.com\www\func_123.php on line 76
Viraban009
Отправлено: 17 Июня, 2009 - 17:02:41
Гость
Покинул форум
Сообщений всего: 83
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
ну ты ему походу передаещь тип булин, а надо именно вот мускуль_результ
ты где то переменную переназначил походу
сравни с этим http://phpclub[dot]ru/detail/article/mysqli#part_3_1 (Добавление)
тут просто нужно понять что этот $result не какой то массив, а просто ссылка на некий объект данных где хранится результат запроса, вот функции и нужно знать что чистить то
Покинул форум
Сообщений всего: 58
Дата рег-ции: Февр. 2009
Помог: 0 раз(а)
Viraban009
Спасибо за сылку. В том то и дело что проблему я понял , дело в том что я понятия не имею что нужно изменить/подправить в сценарии что бы исправить ошибку , потому что у меня там почти так же как и в той же сылке .
Вообщем , всё вроде по правилам и поэтому я не знаю где искать ошибку:
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Собсвтенно я так и думал - кто вам сказал что ресурс $result это экземпляр класса который поддержиавает свойство free() - и все равно класса mysqli я не вижу
Допустим мы бы решили сделать свой класс и рассмотрисм его некоторые части
private $db_link; - Тут будет храниться ресурс подключения к БД
private $db_res; - Тяут будет храниться то что вернулось после SQL-запроса из БД
$this->db_link=mysqli_connent(Параметры); - Это конструктор
$this->db_res=mysqli_query(SQL-запрос, $this->db_link); - Вот бы сделали SQL-запрос и чтото поулчили потом поработали с этим
mysqli_free_result($this->db_res); - Вот и почистили память от запроса
Я конечно изобразил класс гипотетически но если вы хоитет чтобы ваш метод free() не принимал параметор то ресурс ответа SQL должен нахожится внутри класса - в нашем примере это $this->db_res
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Viraban009
Отправлено: 17 Июня, 2009 - 18:10:58
Гость
Покинул форум
Сообщений всего: 83
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
тогда давай полностью код от объяления классов и самих классов с этими методами (функциями).
нужно обязательно передавать атрибуты
$result->free();
$db->close();
иначе можно встретить еще больше мистических проблем в будущем.
и перед тем как начать работать с классами обязательно прочитай эту очень хорошую статью о ООП в php http://www.php.su/learnphp/phpoo/
именно "обязательно" потому что в классах есть такие нюансы которые интуитивно не понятны (можешь ждать одно а получается другое).
С кодом поможем, но вот если будешь дальше с ООП возится, то все о ней нужно знать из той статьи.
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Viraban009 Да уже весьма очевидно в чем проблема - я выше описал
Просто когда он делает SQL-запрос то ресурс ответа сохраняется далеко не внутри класса а когда он вызывает метод free() то подразумевается что этот ресурс уже сам по себе лежит внутри класса хотя его никто туда не копировал
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Viraban009
Отправлено: 17 Июня, 2009 - 18:30:26
Гость
Покинул форум
Сообщений всего: 83
Дата рег-ции: Окт. 2008
Помог: 0 раз(а)
JustUserR
но он же писал что передавал результат, а пхп ему выругался.
Тут еще бы код полностью взглянуть потому, что мне кажется проблема не только в зоне видимости элементов.
aldan8
Отправлено: 17 Июня, 2009 - 18:59:41
Новичок
Покинул форум
Сообщений всего: 58
Дата рег-ции: Февр. 2009
Помог: 0 раз(а)
Viraban009 пишет:
обязательно прочитай эту очень хорошую статью о ООП в php http://www.php.su/learnphp/phpoo/
именно "обязательно" потому что в классах есть такие нюансы которые интуитивно не понятны (можешь ждать одно а получается другое).
В ООП я разбираюсь не отлично , но хорошо. В том числе я изучал это и из данного сайта тоже . Повторюсь , до сих пор с ООП таких проблем не было , которые я сам не смог бы решить . У меня таким принципом написано несколько сценариев ,правда сценарии не самые крутые , но работают.
Viraban009 пишет:
тогда давай полностью код от объяления классов и самих классов с этими методами (функциями).
Выше этого обращения только проверки и редактирование вводимых данных, типа :
if(isset($_POST['name']) . . . ) . . . trim($_POST['name']) и всё такое.
JustUserR пишет:
$this->db_link=mysqli_connent(Параметры); - Это конструктор
$this->db_res=mysqli_query(SQL-запрос, $this->db_link);
Я обращаюсь к БД из сценария и не использую классы чтобы из них подключаться к БД и соххранять результат в своиствах типа $this->db_res и т.д. То есть , я подключаюсь к БД прямо из "основного" кода.
JustUserR пишет:
кто вам сказал что ресурс $result это экземпляр класса который поддержиавает свойство free() - и все равно класса mysqli я не вижу
Я уже начинаю сомневаться в "простых истинах" .
класс mysqli разве не "встроенный класс", типа автоматически подключается к сценариям так же как и такие классы как : Exception, ReflectionClass и т.д. ?
И как я помню , оператор(не знаю как правильнее называется) - $db->query('insert . . . ' ) возвращает что то вроде объекта , в котором содержаться своиства с результатами выполненого запроса и методами которые позволяют их "использовать"(извлекать- fetch_assoc(), num_rows и т.д.) и всё это надо к чемуто присвоить , типа :
$result = $db->query('insert . . . ' );
После того как он ненужен , его "самоликвидуруют" спомощью внутреннего метода free() : "$result->free();" --- типа , удаляют возвращенный объект(из БД) - очистить память.
Если я не правильно задаю вопрос , то - извините , буду внимательнее.
Если я что то не так выучил - скажите и я начну заново изучать ООП (честно сказать так не хочется ).
Да , кстати, не думаю что бы чем то координально отличались способы обращения к БД - объектный или с использованием функций.
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
aldan8 Вопервых всетаки mysqli не всегда автоматически подключается и не при всех конфигурацях (У меня он по умолчанию не подключается)
Вовторых хоть внутренностей сего класса я не знаю но зато знаю что при работе с mysqli есть два способа работы - ООПшный и процедурный (Как я привел в примерах внутри класса)
Так вот такое ощущение что вы смшиваете это два стиля и посему не работает
Что будет если сделать mysqli_free_result($result)
И кстати нельзя отвечать что хоть сий класс встроенный - в разных версия он может бытьт разный и вероятно с глюкомс в какойто версии (Урра - можно послать багрепорт разработчикам сего модуля )
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.