Ответы пользователя по тегу MySQL
  • Как записать base64 в таблицу?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1) Хранить картинки в бд крайне кривое решение. Это может быть оправдано только в случае когда там хранится пара иконок, вставленная в текст прям через <имг срц="тут_бэйз64_строка"... и нет желания все это переделывать ради 2 кастомных микрокартинок. В остальном - конвертировать в картинку и хранить на диске. В бд писать путь до картинки. Если это какой-то аватар или картинка, связанная с другим объектом, соответственно заводить отдельную таблицу на картинки и связь один-к-одному или один-ко-многим, в зависимости от ситуации. В худшем случае поле в той же таблице, если точно будете знать что других картинок к объекту относиться не будет, но это должен быть путь до реальной картинки на диске.
    2) Почему хранение в бд - плохая идея: При каждом запросе у вас будет вытаскиваться пару мегабайт данных из бд, передаваться по каналу соединения с бд, помещаться в память, и после этого еще нужно программно отдавать картину, кроме прочего картинка в бэйс64 занимает примерно на 30% больше места.
    Когда у вас есть картинка на диске, вы просто вставляете путь до нее, это ~50 символов, и сервер отдает ее БЕЗ УЧАСТИЯ ПРОГРАММНОЙ ЧАСТИ, средствами вебсервера и ОС. Это быстрее, потребляет меньше памяти и занимает меньше места в хранилище.
    Ответ написан
    Комментировать
  • Почему не добавляется в базу данных информация с формы?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $q = "INSERT INTO post(author, date_p, text_p) VALUES ('$author', '$datep', '$text_content')"; 
    //  ";" в одиночных запросах не ставится, а текстовые значения обрамляются кавычками
    var_dump($q); //смотрим глазками, проверяем в консоли
    $q = "INSERT INTO post(author, date_p, text_p) VALUES (?, ?, ?)"; 
    //никогда не лезем в бд без подготовленных выражений!
    $st = $pdo->prepare($q);
    $sth->execute([$author, $datep, $text_content]);
    Ответ написан
    1 комментарий
  • SQL запрос к БД через WordPress в 46 раз дольше чем через phpmyadmin?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых нужно нормально писать запрос, хотя бы для понимания что вы делаете:
    SELECT DISTINCT tt.term_id 
    FROM wp_term_relationships AS tr 
    JOIN wp_term_taxonomy AS tt 
    ON tr.term_taxonomy_id = tt.term_taxonomy_id 
    JOIN wp_terms AS t 
    ON tt.term_id = t.term_id 
    WHERE tr.object_id IN (
       SELECT p.ID 
       FROM wp_posts AS p 
       JOIN wp_term_relationships AS tr 
       ON p.ID = tr.object_id 
       JOIN wp_term_taxonomy AS tt 
       ON tr.term_taxonomy_id = tt.term_taxonomy_id 
       JOIN wp_terms AS t 
       ON tt.term_id = t.term_id 
       WHERE p.post_type = 'product' 
       AND p.post_status = 'publish' 
       AND tt.taxonomy = 'product_cat' 
       AND t.term_id = '2961' 
    ) 
    AND tt.taxonomy LIKE 'pa_%';

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

    Ну и в третьих, запросы без лимита почти всегда будут медленными, так как бд вынуждена перебирать все таблицы перебором. Если же такой запрос необходим по каким то причинам, то стоит посмотреть что же происходит с запросом. Нужно в первую очередь сделать отдельно вложенный запрос, проверить как он работает, оптимизировать, а затем то же самое сделать с внешним. Так же неплохо прогнать эти запросы через explain, посмотреть каких индексов не хватает. Ну и первое на что стоит обратить внимание это tt.taxonomy LIKE 'pa_%', что само по себе затратно, и требует обязательного индекса.
    Ответ написан
    Комментировать
  • Как правильно вывести последнее сообщение в блок слева который будет на картинке?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    SELECT m.*, u.login, i.img
        FROM messages m
        LEFT JOIN users u
        ON m.to_user_id = u.id
        LEFT JOIN image i 
        ON m.to_user_id = i.obj_id 
        WHERE m.date > :lastdate # надо выбирать все что позже уже полученных сообщений
        AND image.obj_type = 'user' 
        AND m.from_user_id = :fid  # айди "от юзера"
        AND m.to_user_id = :tid #айди "к юзеру"
        ORDER BY m.date  # по возрастанию все старше последнего полученного
    Ответ написан
    Комментировать
  • Как исправить ошибку?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    rank является зарезервированной функцией мускуля, скорее всего надо обернуть имя поля и имя таблицы в обратные кавычки.
    Ответ написан
    Комментировать
  • Отправка формы и разделение на массив данные из формы?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    explode(), foreach массива, trim() значений, опять explode(), получаете ваши значения.

    UPD:
    Как теперь массово выдать монеты этим пользователям через mysqli ?
    Ну так откуда нам знать? Что за таблица, что и как там храните? Вообще понятие "массово" вставить разнородные данные может подходить только к инсерту, апдейт в вашем случае делается единично каждой записи по условию совпадения поля. Внутри вашего форича после получения данных и делайте апдейт.
    Ответ написан
    Комментировать
  • Правильно ли я понял суть транзакций в веб приложениях?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Транзакция это не логика, транзакция это защита от ситуации "что-то пошло не так". Логика проверок отдельно, внесение данных в транзакции отдельно. Если транзакция не прошла - откатываем все изменения внесенные до ошибки. То есть транзакция защищает целостность данных, где например счет одного клиента уменьшен, а другого не пополнен, например какой-то форенкей отсутствует. Нельзя строить логику проверки на транзакциях, она не для этого.
    Ответ написан
    Комментировать
  • Как получать данные из формы на сайте в разные таблицы БД?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    if(isset($submit)) А если я не нажал кнопку, просто нажал ентер в любом поле?
    $number = $_POST['phone_number'];Такого поля в форме вообще нет.
    if(isset($name) && isset($email)) Ну допустим есть такие переменные, если в них не нэйм и емэйл то что делать? С мессажем та же фигня...

    Запросы ВСЕГДА должны выполняться через подготовленные выражения.
    Ответ написан
    1 комментарий
  • Почему не работает $_SESSION?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Файл подключения:
    Зачем? Тут нет никакой логики связанной с логином.

    Что у вас в сессии смотрели?
    var_dump($_SESSION);
    if (isset($_SESSION['logged_user']))...
    Ответ написан
  • Как обновлять пост в базе данных mysql?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Как мне сделать , чтобы бэк сам послал запрос в базу данных в это время
    Никак, в это время будет каждый раз разное, и даже если использовать крон с какой-то долей разумности, отследить конкретно это время не получится, но это и не нужно...

    в посте есть еще пункт статус, который будет меняться на false,
    Зачем? Разве не понятно что текущее время больше даты окончания?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Хинт: ORDER BY может принимать более одного аргумента
    Ответ написан
    Комментировать
  • Как отобразить различный текст в зависимости от времени добавления данных в БД?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    У нас есть код "DATEPOSTED" из базы данных
    Допустим...

    $DATEPOSTED = date("Y m d");
    Теперь у нас нету DATEPOSTED из базы данных (
    Ответ написан
    Комментировать
  • Почему не работает PhpMyAdmin WAMP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    первая строчка в гугле:
    https://stackoverflow.com/questions/11445678/binar...
    Ответ написан
    Комментировать
  • Как получить нужные id из mysql?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1) поле id обычно используется для обеспечения уникальности данных на уровне строк. Если у вас там не уникальное значение, желательно использовать другое название. В идеале должно быть и уникальное `id` и кастомное `чтототам_id`...
    2) Rsa97 уже написал все ключевые функции для решения данной задачи. В принципе достаточно по ним загуглить...
    Ответ написан
    Комментировать
  • Не могу авторизоваться, почему?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    так, давайте по порядку:
    login = filter_var(trim($_POST['login']), FILTER_SANITIZE_STRING);
    $pass = filter_var(trim($_POST['pass']), FILTER_SANITIZE_STRING);
    Во первых - зачем? Вы здесь не вносите никаких данных в систему, вы просто проверяете данные от пользователя с данными в бд.
    Во вторых - если у вас есть правила для логина и пароля - надо их и применять, а не втыкать абсолютно бесполезные фильтры.

    $pass = md5($pass."ghjsfkld2345");используйте встроенные функции, password_hash и password_verify для работы с паролями.

    $result = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$pass '");
    Читаем про подготовленные выражения. Без них рано или поздно словите инъекцию. И начинать надо сейчас, на этапе обучения, и привыкнуть что по другому с переменными в запросах не работают. Так же, по уму подключение желательно вынести отдельно и добавить настройки. Рекомендую использовать PDO драйвер подключения к бд, он работает чуть быстрее и по функционалу побогаче.

    Warning: count(): Parameter must be an array or an object that implements Countable in D:\OSPanel\domains\Site1\auth.php on line 14
    по тому что читаем доку -
    fetch_assoc — Fetch the next row of a result set as an associative array
    Соответственно, если запрос пустой, то фетчить нечего. Для проверки существует num_rows.

    Выводит: "Такой пользователь не найден." Но в БД такой пользователь есть зарегестрированный, все данные авторизации правильные, а он выводит, что нету такого пользователя.
    Программу не на*бешь. Если говорит что нету, значит нету. А если не находит то что есть, значит вы не правильно ищете, что легко проверить. Вангую что запрос будет совершенно не таким как вы ожидаете:
    ...
    $query = "SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$pass'";
    var_dump('check: ',$login, $pass,$query); 
    $result = $mysql->query($query);
    ...


    UPD: абсолютно верно подмечено Adamos - `pass` = '$pass ' никогда ничего не найдет из-за пробела в условии.
    Ответ написан
    Комментировать
  • MySQL. Поиск в Базе данных по одному параметру?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - научитесь разделять код и представление, винегрет из кода и разметки не то что отлаживать, читать тяжело.
    Во вторых - $result полученный в первом куске вы нигде не используете, ни в выводе, ни в вычислениях.
    Ну и в третьих - в последнем куске вы затираете ранее полученный результат выборки, так что смысл в первой выборке полностью теряется.
    Ответ написан
    Комментировать
  • Как увеличить скорость загрузки данных в Mysql?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1) Как загружаются данные? Из консоли импортом дампа? Из пхпмайадмина? Из своего кода?
    2) Закомментируйте все строки создания индексов, это сильно ускорит загрузку. Естественно в конце надо будет пройтись и ручками добавить индексы в нужные места.
    3) про конфиг
    To check which configuration files are processed by the server, just execute
    $ /path_to_mysqld/mysqld --help --verbose
    At the beginning of output you will find information about configuration files, e.g.
    Ответ написан
    Комментировать
  • Как вывести в laravel count записей с одинаковым полем?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    каунт(*) as cnt + груп бай book_id + ордер бай cnt деск + лимит 5
    Ответ написан
    Комментировать
  • Как лучше обращаться к базе?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Если рассматривать аналогию с php, то там каждый запрос отправляется с новым подключением к базе.
    Это не так. Соединение открывается на все время выполнения скрипта, и закрывается автоматически по завершении работы всей цепочки вызовов. В процессе, одно соединение может выполнить стопицот запросов.

    На сколько целесообразно "пытаться" держать соединение, или все же просто по аналогии с php?
    Вот тут точного ответа не дам, однако в пхп стараются избегать персистент соединения, так как пул соединений не бесконечный, и чем быстрее закроется соединение, тем быстрее можно освободить очередь для открытия нового, таким образом с небольшой задержкой можно обслужить очередь из сильно превышающей пул очереди. А с одним соединением начинается жонглирование запросами внутри 1 соединения, что приводит к блокировке кучи пользователей пользующихся 1 соединением с бд, вместо локально тормозящего 1 юзера в случае открытия/закрытия...

    Более точно можно узнать у нодеров, мои выкладки по отношению к данной платформе больше теоретические.
    Ответ написан
    3 комментария
  • Что надо знать для размещения сайта и работы с данными?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    размещать сайт на хостинге в открытый доступ;
    А есть че размещать то? Хоть один сайт с полутора функциями? Что-то базовое, типа авторизация-регистрация-блог?

    создавать формы для ввода данных , которые будут записывать введенные данные в файл либо отправлять по указанному e-mail
    Ок, первый вопрос отпал...

    В каких технологиях мне нужно разобраться? Надо ли учить PHP и MySQL?
    Любой современный язык под веб подойдет. И базовый SQL синтаксис для начала. Если работы будете "чисто для себя" делать, этого достаточно. Если для заказчика - либо учить что-то из фреймворков, либо брать готовые цмс и настраивать, что тоже вполне работа.

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