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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Запоминаем второе главное правило программирования: если работает медленно, то не надо ничего кэшировать. Надо делать так, чтобы все работало быстро без всякого кэша.
    Ответ написан
    Комментировать
  • Универсальный метод обновления данных в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Подход нормальный, но в описании класса должны быть жетско прописаны имена таблицы и всех полей.
    Имена полей в простейшем случае случае тупо засунуть в массив.

    После этого ты можешь использовать их для формирования динамических запросов.
    Например так: https://phpdelusions.net/pdo_examples/dynamical_update

    $allowed - это твой список полей.
    $_POST лучше не использовать напрямую, а передавать копию в метод, но принцип тот же - берем из поста только заполненные поля и добавляем в запрос.

    Метод Update будет у класса-предка, от которого будут наследоваться классы дл работы с отдельными сущностями, такими как article. Таким образом в классе Article у тебя вообще не будет метода Update, но при этом ты будешь писать

    $article->update($_POST);

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Поскольку у тебя горит, сделай проще.
    Без аяксов
    Без обновления сразу кучи полей.
    Простейший CRUD .

    Вывдишь все записи в виде таблицы со ссылками, ссылки ведут на форму, в ссылке передается id записи. По id извлекается инфа из базы, пользователь редактирует, нажимает сохранить. При сохранение выаолняешь update запрос. Все просто
    Ответ написан
    3 комментария
  • Почему не работает UPDATE?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я не знаю, из какого пальца вы высосали while($row = mysqli_fetch_row($result)){ во втором файле, и что имели в виду этим кодом, но оно работать не будет. Никакого $result в этом файле нет, и взяться ему не откуда.

    На всякий случай: Самые основы. Как работает PHP.
    Ответ написан
  • Как выполнит одним запросом несколько действий MYSQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вот ты и подрос, наконец, чтобы узнать главное правило программирования:

    Преждевременная оптимизация - корень всех зол.

    Никакой нагрузки тут нет, снижать нечего. Поэтому расслабьтся, забудь эти фантазии и займись чем-нибудь полезным.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Во-первых, кавычки в SQL ограничивают строки. плейсхолдер - это не строка.
    Во-вторых, по умолчанию плейсхолдер с одним и тем же именем работать не будет.
    В-третьих, если нужно получить только количество строк, то его надо сразу запрашивать из датабазы
    В-четвертых, все это можно написать в миллион раз короче.
    // Если нужно только количество
        $query ="SELECT count(*) FROM table WHERE code LIKE ? OR code_description LIKE ?";
        $stmt = $db->prepare($query);
        $stmt->execute(["%$search%","%$search%"]);
        $count = $stmt->fetchColumn();
         echo $count;
     
       // Если нужны сами данные
        $query ="SELECT * FROM table WHERE code LIKE ? OR code_description LIKE ?";
        $stmt = $db->prepare($query);
        $stmt->execute(["%$search%","%$search%"]);
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        var_dump($result);
    Ответ написан
    2 комментария
  • Как сгруппировать запрос к MYSQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Фразы в одной таблице, логи просмотров в другой.
    Два запроса, один к фразам, второй к логам с дистинкт
    Ответ написан
  • Как избежать параллельных запросов MySql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    По-моему, это не вопрос, а очередная влажная фантазия.
    Один и тот же юзер не в состоянии создавать "параллельные запросы".
    Тут скорее логика хромает. Зачем-то сделано удаление записи, дальше идёт какое-то анонимное голосование(?!). почему-то можно ставить плюсы несколько раз.

    Удалите этот вопрос и вместо этого спросите, как сделать голосование нормально. В общем случае все делается 1 запросом.
    Ответ написан
    5 комментариев
  • Как правильно обрабатывать ошибки в PHP PDO?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Стоило на неделю лечь в больницу, как изо всех щелей поналезли гамадрилы

    Первый, традиционно для тостера, рекомендует читать про то, в чем сам не смыслит ни бельмеса.

    Второй, опять же, традиционно, разговаривает сам с собой, и отвечает на вопрос, который ему не задавали.

    Третий тупо кидает ссылку на свое пахучее спагетти, в котором цинично измывается над механизмом исключений.

    Как правильно и красиво написать запрос к MySql, чтобы пользователь увидел что с MySql что то не так, типа такого: Ой, MySql не отвечает


    Никак.

    К MySQL, PDO и запросам это не имеет никакого отношения.
    Если у тебя файла не хватает или диск переполнился, или деление на ноль - сценарий будет тот же самый. То есть делать отдельную обработку ошибок для бд и как-то особенно по-хитрому писать запросы не имеет смысла

    Обработку ошибок надо делать унифицированно и осуществлять в одном месте. А не размазывать, как манную кашу по тарелке, по всему коду.

    Берём функцию, set_exception_handler(), и пишем в нее один раз все что хотим сказать юзеру в случае ошибки. Любой ошибки, а не только соединения с базой данных.

    Примечание: юзеру глубоко фиолетово, MySQL не отвечает, или космическая станция на Марсе. Он, скорее всего, даже такого слова не знает. И грузить его подробностями не нужно.
    Ответ написан
    2 комментария
  • Как вывести данные SQL в переменную?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сначала надо соединиться с базой данных

    Дальше все зависит от того, откуда берется 123.
    Если 123 так всегда и написано в вопросе (что вряд ли), то так.
    $query ="SELECT money FROM bot WHERE id_vk = 123";
    $money = $pdo->query($query)->fetchColumn();

    А если 123 сама лежит в переменной, то так
    $query ="SELECT money FROM bot WHERE id_vk = ?";
    $stmt = $pdo->prepare($query);
    $stmt->execute([$id_vk]);
    $money = $stmt->fetchColumn();
    Ответ написан
    1 комментарий
  • Как извлечь отдельный элемент из таблицы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для этого служит метод PDOStatement::fetchColumn

    $name = $pdo->query("SELECT name FROM user WHERE id = 2")->fetchColumn();
    Ответ написан
    Комментировать
  • Генерация php кода и его исполнение из бд, возможно ли?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Какой-то бред.
    Элементы перемещаются с помощью CSS, "РНР код" здесь вообще не при чем.

    Чудовищнее всего здесь ответы: "очень-очень осторожно", "нужно делать валидацию". При этом спроси их - что именно осторожно? Какую именно валидацию? - не ответят. Потому что простого ответа нет, надо учитывать кучу деталей. А в итоге все равно станутся дыры.

    В общем, генерировать РНР код можно, но только на этапе разработки. Генерировать РНР код на основе пользовательского ввода - это ад и харакири.
    Ответ написан
    6 комментариев
  • Invalid datetime format. Как решить?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Дай обезьяне микроскоп, она им будет орехи колоть.
    Родимый, зачем тебе RedBean, если ты его используешь как муэскуэль_квери() из прошлого века?
    Документацию для кого пишут? Ну ты бы хоть базовые примеры посмотрел перед тем, как за это поделие браться.
    А если не понимаешь как им пользоваться, то вообще не трогай, посмотри видеокурсы от руселлера и лепи обычный гуанокод, ORM для этого не нужен

    <?php
    require("connect.php");
    
    $task = R::dispense( 'tasks' );
    $task->task = strip_tags( $_POST['tasks'] );
    $task->date = date('Y-m-d');
    $task->time = date('H:i:s');
    $id = R::store($task);
    Ответ написан
    1 комментарий
  • Как получить уникальные значения JSON массива из ячейки MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не надо хранить в базе данных " массивы значений в JSON'е".
    MySQL - реляционная датабаза. Это означает, что база данных строится из связанных таблиц.
    И вместо колонки values должна быть отдельная таблица,
    table_id | value
    1 | 1
    1 | 2
    1 | 3
    2 | 2
    2 | 3
    2 | 4

    И тогда все выборки будут делаться примитивными SQL запросами, без малейших затруднений со стороны разработчика.
    Ответ написан
    5 комментариев
  • Почему не хочет создаваться запись в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Слово group является зарезервированным в mysql, и его надо брать в обратные кавычки.

    Но код этот в целом просто чудовищный. Мне реально было противно его читать. Такое ощущение, что тебя штрафуют на 100 рублей за каждый пробел.

    Не говоря уже про дырявость и дурацкую идею про "сначала пусть заработает". Проверять работу запроса надо в mysql. А в PHP "пробовать" не надо, надо сразу писать запрос через prepare
    Ответ написан
    Комментировать
  • Как проверить в php результат запроса?

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

    Проверять надо не карман, а деньги. Не результат запроса, а строки, которые он вернул. То есть надо просто сделать фетч и вот уже результат фетча проверять в условии. То есть if ($post)

    Ну и как всегда надо напомнить, что переменные никогда не пихают в запрос напрямую, а передают отдельно. Готовый код можно посмотреть здесь, https://phpdelusions.net/mysqli/check_value
    Ответ написан
    Комментировать
  • Подключение к базе данных MySql, как правильно и современно?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос хороший, но неправильно сформулирован.
    Поскольку тут на самом деле два вопроса - какой драйвер использовать и уже потом - как правильно соединяться.
    Ответ на первый вопрос очевиден. Если выбирать из mysql_connect, mysqli и PDO, то достаточно зайти на страницу мануала, посвященную каждому варианту, и посмотреть, что там написано. Ну или попробовать использовать в своем коде и посмотреть что получится.

    А вот вопрос, как правильно подключаться в двух оставшихся вариантах, действительно важный, и ответ на него, как обычно, почти никто не знает, поскольку все друг у друга списывают статьи не 2-х, а 22-х летней давности. К счастью, есть сайты с актуальной информацией.

    Теоретически, можно использовать mysqli. Но не нужно. Потому что это низкоуровневый драйвер и пользоваться им без подготовки очень неудобно. Но если вот прям так приспичило, то вот как правильно соединяться используя mysqli

    Ключевые моменты:
    - необходимо задавать режим выброса исключений
    - необходимо задавать кодировку
    - при подключении необходимо перехватывать исключение и выбрасывать его снова, чтобы в сообщении об ошибке не было логина и пароля.

    Но правильным ответом, если выбирать из перечисленных трех, будет PDO. Здесь тоже не так просто, поэтому смотрим как правильно соединяться используя PDO - учитывая те же ключевые моменты, которые указаны выше.

    Хорошим вариантом будет использовать высокоуровневую абстракцию типа redbean. Но поскольку нормальной документации по нему нет, а есть только пара хайповых видео, где он используется, причем без каких бы то ни было объяснений и разбора основ, то я бы рекомендовал редбин уже опытному разработчику, а не начинающему. Но в любом случае как в нем соединяться, написано в документации

    Пароль в базе данных не шифруется а хэшируется. Делается это с посощью функции password_hash
    Ответ написан
    3 комментария
  • Объединение запросов SQL, в один запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    требуется оптимизации в один запрос

    Не требуется.
    Никакой "оптимизации" это не даст.

    Если на пальцах, то просто забудь про любые "оптимизации". Вместо этого наладь дела с join. Это не прибавит оптимзации, но зато будет примерно в 100500 раз полезнее
    Ответ написан
    Комментировать
  • Почему не идут данные в бд после отправки формы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Перед соединением с БД надо написать строчку

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я, честно, не понимаю таких вопросов.

    Есть нормальный синхронный функционал выполнения запросов по одному. Помимо прочего - ещё и безопасный, если использовать подготовленные выражения.

    Но мы по какой то причине не ищем лёгких путей, и вместо того чтобы сразу выполнять сформированный запрос, зачем-то вместо этого добавляем его в длинную строку, потом выполняем через мульти квери и потом мучается вопросом, как узнать результат.

    То есть вместо стандартного подхода мы усложняем код, чтобы в итоге получить проблему. Я искренне не понимаю, какой в этом смысл
    Ответ написан
    2 комментария