Подскажите, как можно в mysqli вывести результат (для которого раньше использовалось mysql_result). То есть, задав параметры имени столбца и номера строки, я смог бы отобразить результат ячейки.
А в доке по этому поводу что-ли ничего нету? https://secure.php.net/manual/mysqli-result.data-seek.php, https://secure.php.net/manual/ru/mysqli-result.fetch-field.php и т.п. https://secure.php.net/mysqli
Можете, пожалуйста, привести пример, потому что я сколько ни пытался понять что написано на php.net и повторить это, не смог. Мне просто нужно зациклить вывод ячеек одного столбца. Со старым mysql_result это было просто, а теперь я вообще ничего не понимаю
Всё, что я делал - от балды, дабы понять как это работает. Он выводит столбцы циклом, а не строчки (и да, я знаю, что это логично) PHP: $rez = $mysqli->query("SELECT * FROM prose WHERE public = 1 ORDER BY id DESC"); while ($j<10) { $rez->field_seek($j); $finfo = $rez->fetch_field(); echo $finfo->name; $j++; } --- Добавлено --- Я не понимаю, как сделать цикл для строк таблицы
field_seek - поэтому и столбцы, всё логично Вообще, обычно цикл выглядит PHP: while ($row = $rez->fetch_assoc()) Но если нужно перейти к какой-то строке, то data_seek(), а не field_seek()
1. Ну я с mysql никогда не работал напрямую, так как 4 года назад она уже устаревшей считалась, поэтому я делаю fetch_assoc(), и потом работаю с массивом 2. Не знаю, может и можно. Хотя я бы всё выгрузил в массив и делал с ним уже что угодно
Я и сейчас пользуюсь mysql (а не mysqli). Не понимаю, какие с ней объективные проблемы, и чем она хуже.
@Alex654 ты наверное спал последние 10 лет если такие вопросы задаёшь. расширение mysql отсутствует в php7. либо строе расширение, либо новый блестщий php + современные фреймворки + лучшая скорость. выбор за тобой. --- Добавлено --- вообще пхп тянет за собой ворох всякого говна ради обратной совместимости, но в данном случае разработчики решили резать. несколько лет предупреждали о том что так будет и таки сделали.
@Alex654, представь себе, что mysql - это запорожец, а mysqli - это феррари. Сможешь сам теперь ответить на свой вопрос? Другое дело, что когда ты херачишь на феррари ты не видишь, что творится на обочине. Поэтому при изучении MySQL , я рекомендую использовать запорожец, что бы не было соблазна использовать гремучую смесь процедуры с ооп и не вырубаться в сам запрос.
@Valick, учиться надо на php 7, а там нету запорожца, уже на металлолом сдали. У mysqli неспроста продублировали все методы процедурным интерфейсом...
@mkramer, глупые глупости, декларативный язык SQL учить надо вообще в отрыве от процедурных языков в том числе и PHP. У них абсолютно разная философия. Хотя поправлюсь, это лично моё мнение.
Я же сказал, что бы не было соблазна надавить на гашетку и пропустить то, что на "обочине". Иначе изучение SQL происходит с огромными пробелами.
@Valick, запрос есть запрос, через какое бы расширение ты его не пихал из PHP. Те, кто учатся, копируя столетние примеры на расширении mysql, тоже язык SQL нифига не знают. Если учить SQL как SQL, то надо пользоваться только каким-нибудь SQL-клиентом, типа консоли mysql или какого-нибудь HeidiSQL, и не отвлекаться на PHP.
Да я не спорю, можно и через пыхапымайадмын, но так жеж совсем скучно Я не против, кто как хочет так и учит, я никого не заставляю прислушиваться к моим рекомендациям. И кстати я сто раз проходил через подобные разговоры 10 лет назад.
Мне кажется, такая аналогия неуместна. Приведите хоть один аспект, который важен в повседневной жизни (prepared statements и транзакции мне в повседневной жизни не нужны), который есть в mysqli и отсутствует в mysql. --- Добавлено --- Согласен, такие люди часто знают его очень поверхностно, только самые основы. Я так же начинал Другое дело, что когда человек знает MySQL действительно хорошо, ему точно нет особой разницы, каким клиентом делать запросы - mysql, mysqli, PDO или вовсе какой-нибудь джавовской библиотекой для работы с SQL базой. Ведь вся суть - в построении красивых и в то же время быстрых запросов, правильном проектировании таблиц и ключей, созданию нужных индексов, оптимальной работе с полученными данными уже на стороне PHP, чтобы ничего не тормозило. А чем получать эти данные - да какая вообще разница? Единственный аргумент в пользу mysqli - это транзакции, имхо. Ну и ещё для фанатов ООП - тот момент, что можно в ООП стиле код фигачить при работе с ней. --- Добавлено --- Ага. Который требует обязательного указания хендлера текущего соединения. Ещё и первым параметром. Застрелиться как удобно --- Добавлено --- Возможно, вы правы. Но я его никак не ощущаю, оно мне не мешает при разработке. --- Добавлено --- Я надеюсь, это была шутка. Никаких проблем со скоростью я не испытываю, что бы там ни писали всякие любители тестов, бенчмарков и циферок. Возможно, на гигантских фреймворках-монстрах типа Битрикс и аналогичных, разница и в самом деле есть - 3 секунды рендерить страницу или 1,5 сек. Но при нормальном проектировании, на нормальном железе - повторюсь, нет никаких проблем со скоростью. На любой версии PHP. Зачем мне этот 7.0, если на 5.3 и 5.4 всё работает прекрасно (и нет риска что-то внезапно сломать в существующем коде из-за несовместимости)? И mysql там поддерживается, к слову. P.S. Делал один немаленький сайт, там при даже не очень хорошей организации рендеринга ленты календаря (такое надо бы кэшировать в файл по-хорошему раз в сколько-то минут по крону) самая тяжёлая страница рендерилась 700-800 мс вместе со всеми коннектами к БД и выборкой данных. Запросы, к слову, тоже были не самые лёгкие из-за многочисленных джоинов, это было условие заказчика - хитрый код, выбирающий сначала данные, размещаемые на рекламных предоплаченных позициях. Те, кто пишет сайт, который не может срендериться максимум за полторы секунды - должны идти учиться кодить нормально. А не петь мантры про PHP 7.0, и как он меньше стал потреблять памяти и быстрее исполнять их говнокод.
@Alex654, помимо скорости в PHP 7+ есть новые синтаксические конструкции. Да банальный пример, пишешь здесь код, где создаёшь массив, как нормальный человек, [], или пишешь такой себе красивый код: PHP: $page = $_GET["page"] ?? 1; чел запускает его на php 5.3, и он его посылает нафиг. И тут же возмущение: "нерабочий код посоветовали"... А что в этом такого страшного? В mysqli просто нету понятия "текущее соединение", есть просто соединение.
Если у нас "супер-хайлоад" сервис, где целый пул соединений с сервером БД - я двумя руками за такой подход. Это и правда правильно и круто. Но когда коннекшн всегда у нас один - это реально боль писать его каждый раз всюду. Естественно. Но то же самое верно и в обратную сторону - есть ряд прежних конструкций, которые, будучи запущенными на версии 7.0, пошлют запускающего нафиг, и он будет опечален. По примеру выше - чем не годится тернарный оператор? PHP: $page = isset($_GET['page']) && (int)$_GET['page'] >= 1 ? (int)$_GET['page'] : 1; Если слишком многословно - можно короче: PHP: if (!isset($_GET['page']) || (int)$_GET['page'] <= 0) $_GET['page'] = 1; И далее везде тупо обращаться через $_GET, но переменная уже проверена и скорректирована, если требовалось. Хотя и более громоздко по записи, конечно - квадратные скобки, кавычки писать каждый раз. По поводу массивов - так этот JS-синтаксис с квадратными скобками начиная с версии 5.4 работает)) Впрочем, не сильно запарнее использовать PHP: $a = array(); Символов больше, но можно это на хоткей какой-нибудь в редакторе забиндить, если нужно часто (а не 1-2 раза за весь скрипт). P.S. Я понимаю, что в общем случае ?? сильно сокращает время записи, это подход, очень привычный разработчикам на JavaScript. Но штука в том, что такой код потом будет работать только на версии 7.0, и при запуске на каком-нибудь хостинге, который поддержки 7.0 не имеет (или где это просто не является дефолтом, таких сплошь и рядом) всё поломается, и заказчик будет в бешенстве. Хорошо когда проект свой, и имеешь полный контроль над тем, где он запущен, а если пишешь для других людей - я за максимальную совместимость с самыми разными версиями и окружениями
Сейчас - не уверен. В середине-конце 2016-ого, когда я заканчивал последние серьёзные проекты, таких было полно. Процентов 40-50 навскидку И потом, есть вообще пограничные ситуации (на грани маразма, но всё-таки), когда версия 7.0 физически недоступна. Пример - машина со слабой аппаратной начинкой, стоящая в качестве домашнего сервера, на ней 2-3 сайта с очень низкой нагрузкой, не монетизируемые, за которые жалко платить хостерам, там же SHOUTcast и ещё несколько сервисов, включая файлопомойку. По-хорошему на такие машины ставят Linux, но у меня стоит XP со вторым сервис-паком. PHP версии 7 не доступна на ОС Windows старше Семёрки. Просто не компилировали под эту платформу, и самому скомпилировать не выйдет, так как в исходном коде используются вещи, не поддерживаемые тем компилятором, который под XP компилирует. Более того, замечено, что на ОЧЕНЬ слабом железе чем новее версия PHP, тем медленнее она работает (сравнивал в своё время 5.2, 5.3 и 5.4 на одном и том же хостинге путём переключения версии). Но если 5.2 по ряду причин держать всё же не стоит, то вот 5.3 - по сути единственный вменяемый вариант для таких вот случаев. P.S. После апгрейда той машины до 5.3 скорость работы простых тестовых скриптов всё же упала раза в полтора, что косвенно подтверждает наблюдения о том, что "богаче функционал -> медленнее скорость работы".
Пацаны, в наше время шаред хостинг с php7 на год или даже vps стоит меньше чем час работы программиста. О чём тут говорить вообще? --- Добавлено --- Да, блин, я тоже иногда начинаю ностальгировать. Ставлю на телефон эмулятор MS DOS или Super Nintendo, умиляюсь, пла́чу... Но я не путаю работу и токой вот дрочь. Пятый пых умер, насрать и забыть!