Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу MySQL
  • Как распарсить mysql_fetch_array когда используется in ?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    echo json_encode($mysqli->query($query)->fetch_all(MYSQLI_ASSOC));
    Ответ написан
    Комментировать
  • Как сделать проверку на успешность записи?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Проверять ничего не надо.
    Писать "Ошибка! Вы не зарегистрированы. нет ни малейшего смысла.
    И вообще ничего не нужно выводить. Надо делать редирект.
    Ответ написан
    Комментировать
  • Как сформировать таблицу из массива данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    SELECT *, to_days(curdate()) - to_days(date_add) as diff
    FROM track_tabl WHERE id_user=?
    Ответ написан
    Комментировать
  • Как рассчитать разницу между датами PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    SELECT to_days(curdate()) - to_days(date_add) as diff FROM track_tabl WHERE id_user=?
    Ответ написан
    Комментировать
  • Почему скрипт не видит подключение MySQLi?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Очень странно.
    В приведенном примере все должно работать.

    Такую ошибку будет писать, если к $db идет обращение из функции.
    Ответ написан
  • В какой момент обновлять данные в БД mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В момент записи.

    База данных - не текстовый файл. И совсем не обязательно удалять объявление физически, чтобы оно больше не показывалась. В объявлении может быть такое поле как "последний день показа". И при выборке показывать только те объявления, у которых эта дата больше либо равна текущей.
    Ответ написан
    Комментировать
  • Почему не работает SafeMySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нужно убрать строчку $mysqli = new SafeMysql("localhost", "root", "1", "ai");
    и $db = new SafeMySQL(); - тоже лишняя.

    Кстати, я исльно сомневаюсь по поводу кодировки. Я бы поставил utf8 - хуже не будет, а вот вот кучи проблем можно будет избежать
    Ответ написан
  • Как решить проблемы с кодировкой у одной буквы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Неважно, одна это буква, или 10. Кодировка соединения с БД настроена неверно.
    Нужно убедиться, что
    - кодировка таблиц действительно utf8
    - кодировка соединения(задается в mysql(i)_set_charset() или в DSN) - utf8
    - кодировка страниц сайта - utf-8
    Ответ написан
    Комментировать
  • Кривое сохранение символов в MySql через PHP. Что делать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Скорее всего, причина в повальной болезни современной школоты: фатальном неумении отслеживать причинно-следственные связи. Например, если при просмотре выводимых из БД данных, они отражаются неправильно, то делается вывод о том, что они записались неправильно. Или, как вариант - аффтар сам же совершает в коде какие-то глубокомысленные телодвижения, не понимая их смысла - просто потому что точно так же пацаны подсказали, а он тупо скопировал - и они-то как раз и портят данные.

    Но в любом случае - проблема в неумении разделить процесс на этапы, и проконтролировать данные на каждом. Чтобы впоследстви хотя бы задать адекватный вопрос, типа "При передаче данных из браузера данные портятся". Или "при записи в БД данные портятся". Вместо этого мы получаем беспомощное "С данными что-то происходит, но что именно и в какой момент - ниняю".
    Ответ написан
  • Как вывести с mysql больше одной строки через mysql_fetch_array?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Один из тех вопросов, от которых волосы встают дыбом. На всех частях тела.

    Ну ладно - вопрос. От человека, который массив в первый раз в жизни увидел. Можно понять.

    НО ОТВЕТЫ!!! "Тут какие-то заборы! Коровники! Мама, мы в аду! Мы в аду, мама!"
    Ответ написан
    Комментировать
  • Нечего не происходит после передачи запроса MySQLi?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Что мне использовать: mysql или mysqli?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    НИ ТО НИ ДРУГОЕ

    Впечатления: это ад, посаны!

    Истину глаголешь.
    Потому что mysqli не предназначена для использования в коде напрямую. А только через более высокоуровневый враппер. Сама по себе это низкоуровневая либа, которая обеспечивает доступ ко всем самым мелким настройкам драйвера. Именно поэтому она так многословна и неудобна. И именно поэтому надо на её основе обязательно лепить враппер.

    С другой стороны, старая mysql - ТОЖЕ низкоуровневая либа, и тоже НЕ ДОЛЖНА использоваться в коде напрямую, а только как основа для враппера. К тому же она официально устарела.

    В общем, у тебя два варианта:
    • Либо использовать PDO, который является более высокоуровневой либой-недовраппером. Как пользоваться, написано здесь: Как работать с PDO?
    • Либо, если хочешь все-таки базироваться на mysqli - использовать готовый враппер SafeMySQL, с которым все ужасы уйдут в прошлое, а код сократится в 10 раз
    А САМЫЙ лучший вариант - это перестать гонять запросы из кода напрямую, а вместо этого освоить уже какой-нибудь фреймворк и использовать для работы с базой ORM
    Ответ написан
    2 комментария
  • Почему не выполняется запрос mysqli?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Проблема в пихании в код разных умных слов без понимания их смысла.
    Если убрать из кода слово MYSQLI_USE_RESULT, то волшебным образом ошибка исчезнет.
    Впрочем, я должен признать, что сермяжная правда в двух других ответах есть. Если последовать моему же совету, и использовать prepare/execute вместо query (поскольку эта парочка используе USE_RESULT без вариантов), то как раз и придется либо выбирать все данные, которые вернул запрос, либо освобождать ресурс через free(), либо перед выборкой дергать store_result().
    Но - повторюсь - в текущем коде этот параметр не имеет смысла и в то же время является причиной всех бед.

    Но проблемы этого кода на этом только начнутся.

    Во-первых, НИКОГДА больше пиши так: die(mysqli_error($mysqli)); а то станешь козленочком и тебя заберут в армию.
    Вместо die надо писать trigger_error()

    Во-вторых, НИКОГДА не подставляй переменные напрямую в строку запроса. Передавать данные надо только через плейсхолдеры. Если родной механизм слешком сложный, то можешь воспользоваться библиотекой phpfaq.ru/safemysql и код получится таким.
    $exists = $db->getOne("SELECT 1 FROM users WHERE social_id=?s",$social_id);
    if($exists){
    	//тут устанавливаются куки
    }else{
    	$db->query("INSERT INTO users (social_id) VALUES (?s)", $social_id); 
    }

    (выводить бессмысленные okay или oops не нужно)
    Ответ написан
    7 комментариев
  • Почему не выполняется запрос mysqli?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Дубль. Афтар не осилил отредактировать старый вопрос, и задал новый, более актуальный.
    Ответ написан
  • Можно ли передавать массив в этом запросе MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Здесь нет никакого запроса mysql, даже близко.
    А есть какой-то самопальный винегрет, который собирает запрос из кусочков неизвестным читателю способом.

    В любом случае, первое, что надо усвоить про составление запросов: ни одна переменная не должна попадать в запрос напрямую!

    То есть, первый вариант делает весь этот самопальный винегрет (который, тем не менее, делает работу с БД безопасной) - бесполезным.

    Поэтому, стоит использовать второй вариант, который, хоть и не оптимальный, но зато безопасный. А чтобы переменная не "затиралась" (а что ей еще остаётся делать, если её постоянно перезаписывают?), надо сделать её массивом:
    $listings = [];
    foreach ($array as $key => $value)
    {
      $listings[] = $iaAuto->get(
            array('model_id' => $value), 
            $pagination['start'], 
            $pagination['limit'], 
            $_SESSION[iaAuto::SESSION_SORTING_KEY]
        );
    }

    Полученный в результате массив скорее всего будет отличаться от ожидаемого, так что надо будет немного изменить логику его перебора
    Ответ написан
    Комментировать
  • Почему mysql после переноса сайта с локального сервера на хостинг некорректно работает?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если тег mysqli стоит не от балды, а это АПИ действительно используется, то в перед коннектом написать
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    Плюс включить вывод ошибок или смотреть ошибки в логе.

    Если использвется старое апи mysql_query, и нет обработки ошибок - то включить вывод ошибок и по косвенным ошибкам смотреть, где проблема.

    Как включить вывод ошибок и как отлаживать программы вообще, написано здесь: phpfaq.ru/debug (в качестве бонуса там объясняется, почему бессмысленно задавать вопросы вида "почему у меня не работает?").
    Ответ написан
    Комментировать
  • Хранение JSON в реляционных БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Это увеличит нагрузку на БД.
    2. Само по себе решение продиктовано только дикостью и чудовищным невежеством. Через годика два, если наберешься опыта, то сам с ужасом будешь смотреть на этот свой вопрос.

    Описанная структура до мозга костей реляционная. Никаких джейсонов тут даром не нужно. Если сделать нормальные три таблицы, то любой фреймворк из коробки предоставит средства управления (добавление, удаление, редактирование) этими комментами и фотками и чем угодно, одной-единственной командой. Для самопального джейсона же придется писать всю обвязку самому, и потом окончательно в ней запутаться.

    Если взять ларавель, то в модели постов надо будет добавить метод
    public function recentComments()
    {
        return $this->hasMany('Comment')
            ->orderBy('created_at', 'desc')
            ->limit(3);
    }

    и ВСЯ лента будет строиться одним оператором, что-то вроде
    return Post::orderby('created_at', 'desc')
        ->with([
                'photos',
                'recentComments',
            ]);
        ->limit(5);
    Ответ написан
  • Выборка больших данных из базы сложными запросами?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Дла начала надо понять, что никакой живой пользователь никогда не будет читать 20 000 записей на одной странице.

    после этого можно продолжать оптимизацию
    Ответ написан
    Комментировать
  • Как укоротить sql запрос ?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Во-первых, длина никакого отношения к "укладыванию сервера не имеет". Важен не размер, а умение. Уменьшать надо не запрос, количество просматриваемых запросом строк.
    Во-вторых, надо не досужих доброхотов спрашивать, а самому смотреть, тормит запрос, или нет. Если нет - то и не париться раньше времени.
    В-третьих, почему бы не спросить того же "знатока", который это тебе сказал?

    Единственная проблема, которую я здесь вижу - это множественные суб-селекты exists, которые при большой выборке могут стать проблемой. Но если выборка небольшая, то и проблемы нет.

    Если прям хочется разобраться, то для начала выполни в консоли две команды
    \W
    EXPLAIN EXTENDED дальше твой запрос

    и посмотри таблицу. Если цифры в колонке rows копеечные, то и не парься. Заодно можешь посмотреть, во что оптимизатор превратил твой запрос - возможно, он уже научился эту красоту сам транслировать в джойны.
    Ответ написан
    2 комментария