у тебя в результате выборки одна строка. первым вызовом (который ифом прикрыт) ты получаешь следующую строку результата. поскольку офсет нулевой - вернется первая строка. поскольку строка вернулась - условие истинное значение приняло и свалилось в тело. в теле ты еще одну следующую строку получаешь. но она же у тебя только одна и уже вернулась разок. поэтому возвращается нул как признак достижения конца при итериции результата запроса. и ты в замешательстве... Код (Text): if(null !== ($row = fetch()) { var_dump($row);die(); } Добавлено спустя 1 минуту 59 секунд: кстати query это именно запрос который в базу отправляется. для результата выполнения запроса как не сложно догадаться лучше использовать result
проблема в том что другому программисту понадобится модификация твоего кода и для него будет неожиданным несколько не общепринятое применение имени переменных. так что лучше переучиться по возможности.
У переменной $connect тип "ресурс", как правило если что-то было прочитано из переменной такого типа, то этого в ней больше нет.
При открытии коннекта mysqli возвращает ссылку на него. Это именно ссылка на ресурс. При юзании ООП-стиля в работе с ним, это прозрачно и ты вообще не в курсе. У тебя в руках действительно просто экземпляр класса mysqli, а то там внутри него наинкапсулировано, в общем-то плевать. Но при юзании процедурного стиля, ссылочку на коннект нужно отдельно хранить и самостоятельно во все вызовы подсовывать. Тут, собсна, это и происходит. Обрати на прокидывание $connect в запросе. Добавлено спустя 4 минуты 49 секунд: Ты про if($connect) не, тут как раз все ровно. Там либо ресурс, который отработает как true и останется как есть, либо, если не приконнектило, там чистый false.
Fell-x27, а если я в этот код добавлю echo get_class($connect); ? Какая разница, как я использую объект - передаю как параметр, или вызываю методы, он всё равно объектом остаётся. В документации сказано, что mysqli_connect - псевдоним конструктора mysqli. И вполне возможно, хотя и не стоит, использовать вперемешку методы и misqli_* функции
Ты не понял, "$connect" тебе выдается только при процедурной инициализации mysqli_соединения. И у него нет методов. Вообще. Работа со ссылкой на коннект ведется только в процедурном стиле. В объектном такого нет. Она живет в недрах экземпляра и ты вообще не подозреваешь, что она существует. Он псевдоним, но как бы не совсем таковой. Результаты работы отличаются несколько. В доке тоже это отдельно указано.
Fell-x27, вот я у себя выполнил код Код (Text): <?php $mi = mysqli_connect("localhost", "name", "password", "cdcol"); echo get_class($mi); Получил вывод Код (Text): mysqli
Потому, что это псевдоним mysqli::__construct() mysqli mysqli_connect (... Эта функция вернет набор свойств установленного соединения в качестве объекта mysqli. Это не является ресурсом, как было в mysql_connect. По этому если ты сделаешь так: Код (PHP): $mi = mysql_connect("localhost", "name", "password", "cdcol"); echo get_class($mi); Получишь в ответ: Warning: get_class() expects parameter 1 to be object, resource given in ...