Ответы пользователя по тегу MySQL
  • Как сделать поиск данных из mysql которые сохраненны в формате unicode?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо сделать сохранение данных в нормальном формате и тогда будет поиск работать.

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Триггер не нужно постоянно вызывать, это и есть автоматизация.
    Но никакой триггер здесь не нужен.

    Всё что тут понаписано - это какие-то завиральные идеи от неграмотности.
    И их надо просто выкинуть из головы.
    поле product_id не имеет смысла, его надо убрать из таблицы
    в name ничего подставлять не надо.
    Ответ написан
    8 комментариев
  • Как вывести данные из двух таблиц?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ошибка детская, она вот в этом: "Есть 2 таблицы, в которых одинаковые поля".
    Очень часто новички, которые не понимают, как работает база данных, делают подобное.
    И всегда потом приходится переделывать, даже если очень не хочется.
    Потому что в БД не должно быть таблиц с одинаковыми полями. Собственно, сообразительные новички уже на этом вопросе, "как выбрать из двух таблиц" начинают понимать, что у них что-то пошло не так.

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

    Имя таблицы, кстати, тоже очень странное. Наверняка там внутри тоже треш и угар и вот её-то как раз и надо разделить, только не горизонтально, а вертикально. Судя по составу полей, нужна одна таблица city и одна таблица people, в которой указывается только city id
    Ответ написан
    2 комментария
  • Правильно ли я понял суть транзакций в веб приложениях?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Все, абсолютно все люди путают транзакции с блокировками. Это какая-то массовая галлюцинация.
    Хотя там все просто, как 2х2
    Транзакции используются для консистентности. Чтобы когда выполняется больше одного запроса, изменяющего данные, то были выполнены либо все, либо ни одного.
    А чтобы не было race condition используются блокировки.

    Делаете SELECT FOR UPDATE, который блокирует строку, чтобы больше никто из нее не мог читать. Любой процесс, который захочет прочесть это же значение, будет стоять и ждать.
    Дальше вы делаете свои проверки, и потом сам апдейт, который отпустит блокировку.
    Процесс, который ждал своей очереди, получит уже измененное значение, и проверка не пройдет.
    Ответ написан
    Комментировать
  • Как не дать права на SELECT?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это называется "доступ по API".
    Вместо прямого соединения с БД, "скрипт" отправляет запросы на удаленный веб-сервер, причем не SQL запрос, а какой-нибудь JSON. А уже приложение на веб-сервере соединяется с БД и отправляет запрошенные данные назад.
    Это приложение будет и ключ проверять, и права доступа - какому пользователю какие данные можно отдавать.
    Именно по такой схеме например работают мобильные приложения в вашем телефоне.
    Ответ написан
    Комментировать
  • Сильно ли тяжело для базы данных innoDB 1 500 таблиц?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для базы это ерунда
    А вот для разработки будет проблема, потому что автор, наплодивший этот зоопарк, явно не прочитал даже начальных сведений про базу данных, и не понимает, зачем в ней нужны таблицы.
    А программистская привычка с подозрением относиться к повторениям ещё не выработалась.

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

    Я настоятельно рекомендую книгу Святослава Куликова "Реляционные базы данных в примерах", она свободно доступна для скачивания. В ней как раз и даются основы проектирования баз данных.
    Ответ написан
    Комментировать
  • Как создать базу данных и связать с PHP и MySQL?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    База данных нинужна
    Достаточно будет
    <?php
    file_put_contents('databaza.txt', json_encode($_POST, JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND);

    ну и чтобы вывести
    foreach(file('databaza.txt') as $loh) {
         echo json_decode($loh, true)['email'], "<br>\n";
    }


    Ну а форму на HTML я думаю Frontend developer (senior+) уж как-нибудь осилит.
    Ответ написан
    2 комментария
  • Не срабатывает sql запрос. Как быть?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Не выполняется mysql запрос

    Но в данном случае можно сократить путь "получение сообщения об ошибке - чтение сообщения об ошибке - гугление сообщения об ошибке".
    Надо эти черточки и нолики перенести из bind_param в сам запрос.
    Ответ написан
    Комментировать
  • Как исправить долгое выполнение запросов на большой таблице?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    возможно вся логика неправильная и можно сделать более грамотно.


    Штирлиц шел по Берлину, и не мог понять, что выдавало в нем русского шпиона - то ли рация за спиной, то ли волочащийся сзади парашют, то ли болтающийся на груди ППШ.

    когда записей в таблице порядка 10 миллионов время выполнения запроса


    ВНЕЗАПНО оказалось, что если использовать микроскоп для забивания гвоздей, то в него становится почему-то плохо видно.

    В простой БД два поля - id и data. У поля data тип JSON. В нем хранятся данные, получаемые из нескольких форм.


    Но вы же, когда эту, с позволения сказать, "базу данных" проектировали, ведь радовались своему остроумию и хитрости? Зачем проектировать структуру базы данных, делать какие-то таблицы, между таблицами связи. потом сложные запросы писать? Если можно хопа, и в джейсон все кучей навалить!

    Ну вот и продолжайте радоваться дальше.

    Сама по себе дурацкая проблема проверки уникальности длинного текста решается элементарно, добавляется колонка с md5 от содержимого, и поиск делается по ней.
    Но ведь в таблицу эти данные складываются не только чтобы проверять их на уникальность. И собственно какая-то работа с этими данными все равно превратится в боль
    Ответ написан
    3 комментария
  • Влияет ли различные кодировки таблиц на производительность MySQL?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Нет, не влияет.
    Если хотите чтобы у вас нормально сохранялись тексты, а не рубились на половине, используйте utf8mb4
    про utf8 давно пора забыть
    Ответ написан
    Комментировать
  • Экранирование sql запросов, достаточно ли функции?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Эта функция не самописная, а цельнотянутая. Причем из самых смрадных помоек интернета.
    К защите от инъекций не имеет вообще никакого отношения.

    - trim() ни к инъекциям, ни к защите отношения не имеет
    - stripslashes() просто бессмысленная функция, которая только портит данные
    - htmlspecialchars() не имеет отношения к SQL. Применяется при выводе данных, а не при получении
    - real_escape_string() - единственная функция, которая имеет отношение к SQL, но при этом вообще не предназначенная ни для каких защит.

    Попробуйте на основании этой информации самостоятельно оценить полезность вашей функции.

    Возьмем классический пример
    $_GET['id'] = '1;DROP TABLE Students;';
    $id = formatstr($_GET['id']);
    $sql = "SELECT * FRPM Students WHERE id=$id";

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

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    При соединении с БД надо указывать кодировку.
    Поскольку на сайте используется юникод, то соответственно указывать надо utf8mb4

    А сессии тут вообще не при чем.
    Ответ написан
    1 комментарий
  • Почему не записываются данные в БД, UPDATE не работает?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если данные не обновляются в БД, то на это может быть три причины
    1. Код добавления вообще не вызывался.
    2. При добавлении произошла ошибка.
    3. Данные добавились, в одну базу, а результат смотрим в другой.

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    У вас в этой таблице лежат данные, закодированные в windows-1251.
    Вам надо или перекодировать полученные данные нормально, через mb_convert_encoding(), а не вот это вот недоразумение utf8_encode.

    Или лучше всего один раз и навсегда перекодировать данные в БД.
    Для этого надо сделать дамп, поменять в нем set names с utf8 на cp1251, и выполнить сначала на тестовой БД
    Если данные будут читаться, то выполнить на боевой.
    Ответ написан
    1 комментарий
  • Что делать если хост отвергает подключение к mysql из вне?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо погуглить ошибку.
    И прочесть, что для использования сервиса удаленными компьютерами надо разрешить входящие соединения к этому сервису на файрволле.
    Ответ написан
    Комментировать
  • MysqlDump в разные файлы разные базы данных?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Не очень понятно, что имеется в виду под "скриптом", но однострочник на баше написать можно.
    Собственно, задача стандартная, и решение легко находится гуглем, если владеть языком международного общения.
    mysql -uroot -N -e 'show databases' | while read db; do mysqldump -uroot "$db" > "$db".sql; done

    spoiler
    Если вдуматься, то интернет - это самое непроизводительное использование ресурсов в человеческой истории.
    Ответы на 99% вопросов уже лет 20 как лежат на расстоянии вытянутой руки.
    но их задают снова и снова
    Ответ написан
    4 комментария
  • Почему не выводит ошибку при работе с базой после переноса на сервер?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Комментировать
  • Не добавляются данные в таблицу phpmyadmin?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если после добавления данные не видны в программе phpmyadmin, то на это может быть три причины:
    1. Код добавления вообще не вызывался.
    2. При добавлении произошла ошибка.
    3. Данные добавились, в одну базу, а результат смотрим в другой.

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

    <?php
    # Настройка ошибок
    # Для локального сервера
    ini_set('display_errors', 1);
    # Всегда
    error_reporting(E_ALL);
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    Ответ написан
    Комментировать
  • Почему Mysql на виртуалке не грузиться после перезагрузки?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    The manual page at dev.mysql.com/doc/mysql/en/crashing.html contains
    information that should help you find out what is causing the crash.
    Ответ написан
  • Как увеличить скорость добавления данных в базу данных mysql?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы решить проблему, её надо сначала сформулировать.
    В данном случае никакой проблемы нет, есть невнятные страдания.
    Ни кода, ни внятного описания проблемы, ни даже пояснения, что имеется в виду под "добавлением" в вопросе нет.

    В простейшем случае либо делать один множественный запрос insert, либо заключить отдельные запросы insert в транзакцию
    Ответ написан
    6 комментариев