Задать вопрос
Ответы пользователя по тегу MySQL
  • Как сохранить пользователя в БД, если пользователь совершил аутентификацию через ВК?

    neuotq
    @neuotq
    Прокрастинация
    0. В целом на уровне БД редко есть смысл запрещать пустой пароль.
    1. Инициируем создание объекта пользователя, заполняем поля, которые возможны (Имя, имейл если сетка отдает и тп)
    2. Сохраняем его куда-нить(ну допустим в локалсторе), создаем кукис, запоминаем что он незавершил регистрацию
    3. Пользователю показываем блокирующее любые другие штуки окошко/страницу с просьбой завершить регистрацию и ввести пароль.
    Ответ написан
    4 комментария
  • Как запретить доступ к определенному столбцу в таблице?

    neuotq
    @neuotq
    Прокрастинация
    В целом было нельзя.
    Но есть относительно новая фича
    https://dev.mysql.com/doc/refman/8.0/en/server-sys...
    Те можно вроде бы вычитать привелегии. Попробуй может у тебя получится. Точно работало для таблиц, у юзеров которым давали права на БД. Для столбцов не пробовал.
    Ответ написан
    Комментировать
  • Как исправить ошибку с подключением к бд?

    neuotq
    @neuotq
    Прокрастинация
    В .env очевидно 127.0.0.1
    А вот
    DB_DATABASE=laravel
    Вы не забыли базу данных laravel создать?
    Ну и перепроверить что логин/пароль root работает.
    Ответ написан
  • Как отследить статистику запросов MySQL в реалтайм?

    neuotq
    @neuotq
    Прокрастинация
    Есть мощная штука Percona Monitoring and Management, можно утонуть в аналитике, графиках и всевозможных дашбордах.
    Ответ написан
    Комментировать
  • Почему Node JS убивает процесс при запросе к MySQL?

    neuotq
    @neuotq
    Прокрастинация
    Ох.. ну вы даёте. У вас конечно же сыпется нода из-за ограничения оперативной памяти.
    Делайте запросы кусками(чанками), можно начать с 1000.
    (примерный полупсевдо код)
    const mysql = require('mysql')
    
    // создаем подключение, 
    // используем https://github.com/mysqljs/mysql#pooling-connections читать настройку!
        const pool = mysql.createPool({/*тут данные для входа*/});
    // Количество чанков
        const chunkSize = 1000;
    //Запрос на количество строк в таблице
        const poolTableSizeQuery= "SELECT count(*) as rowsCount FROM main";
    //Начинаем с определения количество строк
       pool.query(poolTableSizeQuery , function (error, results, fields) {
          if (error) throw error;    
          if (result && result[0]) {
        //Количество строк
          const rowsCount = result[0]['rowsCount']; 
       // Количество чанков размером в chunkSize (округляем значение)
          const chunksCount = Math.ceil(totalRows/chunkSize);
      // Наш запрос тепреь с ЛИМИТОМ
          const myQuery = "SELECT partname FROM `main` LIMIT";
          for(var i = 0; i < chunksCount; i++) {                 
                   //Сдвиг для текущего чанка 
                   let chunkOffset = i*chunkSize;
                   //Сдвиг для текущего чанка
                    let chunkQuery = myQuery + offset + "," + chunkSize;
                   //Выполнение твоего запроса, уже с лимитом и сдвигом
                    pool.query(chunkQuery , function (error, results, fields) {
                         if (error) throw error; 
                        //Тут выводим куда-то или ещё что.
    
                    });
                }
         }
      });

    С размером чанков можно играться.
    Алгоритм вышел такой:
    1. Создаем пул для кеширвоания подключения к БД
    2. Определяем размер чанка(на основе ограничений ОЗУ)
    3. Узнаем размер таблицы и вычисляем количество шагов
    4. Делаем запрос чанка со сдвигом
    5. Выводим пользователю результат
    6. Если чанки не кончились идем в п 4
    Из минусов, не лочится таблица, а значит не гарантии целостного результата, если данные были измененны между запросами. Если это не важно, то не парься. Если важно. то нужно придумать как лочить таблицу на запись на время выполнения скрипта,
    Ответ написан
    Комментировать
  • Стоит ли переходить на Percona server с MariaDB/MySQL?

    neuotq
    @neuotq
    Прокрастинация
    Вопрос не тривиальный и переход должен делать специалист.
    Выбор всего движа должен происходить в том числе из реалий вашего бизнеса/проекта, команды специалистов и прочего.
    Таким образом, если сейчас всё работает и устраивает и вы сами лично не видите плюсов/минусов, и даже не сильно разбираетесь в настройках, то я бы рекомендовал сосредоточится на улучшении, развитии других частей проекта, в которых вы в теме.
    А для переезда, масштабирования БД выделить бюджет на специалиста, когда бюджет появится. А так, работает не трогай, тк переезд это всегда подводные камни, время, нервы и возможные простои. Оно вам надо? Я думаю нет.
    Поэтому не спешите.
    И в первую очередь составьте список, лёгкое ТЗ, проблем и задач администрирования БД в вашем случае. Затем его можно наложить на ваш текущий движ, и может быть всё не так уж и плохо. И скорее всего, есть много инструментов облегчающих, автоматизирующих работу и в MariaDB.
    А может вам вообще в самом sql функций не хватает, может вам нужен PostgreSQL?
    Нет, так дела не делаются, вопрос побольшому счёт вообще бессмысленный, разве что в комменты вы ждете любителей холиваров ради холиваров.
    Ответ написан
    1 комментарий
  • Как получить строку с ближайшей датой MySQL?

    neuotq
    @neuotq
    Прокрастинация
    Группируйте по уникальному свойству, например по id , таким образом в конце добавляется GROUP BY bolshoy_theatre_events.id
    Ответ написан
  • Знает кто небольшую книгу по php?

    neuotq
    @neuotq
    Прокрастинация
    Lopez - Learning PHP 7 (есть в Вк документах).
    Ну и конечно же PHP Right way
    Ответ написан
  • Как сделать переадресацию?

    neuotq
    @neuotq
    Прокрастинация
    Самый тупой и простой способ, после проверки авторизации(не знаю как у тебя через куки например), ставить хэдер:
    header("Location: https://example.com/login");
    Короче там адрес куда перенаправить бразуер. Важно только чтобы не было никакого другого вывода, либо тегов до выполнения этой команды. Короче говоря важно чтобы передача хэдера в бразуер юзеру шло первой.
    Ответ написан
  • Бекап таблицы mysql с последующим удалением записей?

    neuotq
    @neuotq
    Прокрастинация
    Удалять базу данных из командной строки не заходя в mysql, можно с помощью mysqladmin
    mysqladmin drop database_name
    Ответ написан
  • Как сделать что бы переменные формирировали запрос?

    neuotq
    @neuotq
    Прокрастинация
    Зависит от логики, в самом простом случае собирают строку через цикл foreach или другой удобный в данной ситуации,или через несколько if , там с любыми проверками условий. А затем готовую строку отправляют в prepare.
    Ну те грубо говоря:
    /*Допустим мы уже инициализировали и настроили соединение к БД pdo*/
    /*Начальная строка для запроса*/
    $sql = 'SELECT one, two, three
        FROM table';
    /*Дополнительная строка для запроса*/
    $sql_add = '';
    
    /*Массив для данных*/
    $data  = array();
    if($one) {
       //если уже не первый раз делаем, то нужно добавить AND
        if(strlen($sql_add)){
            $sql_add = $sql_add.' AND ';
        }
        //Добавляем новое условие
        $sql_add = $sql_add . ' WHERE one = :one ';
        //Добавляем новые данные в массив
        array_push($data,[':one'=>$one]);
    }
    
    ...
    //Собираем все вместе
    $sql = $sql.$sql_add;
    
    //Подготовляем строку
    $sth = $db->prepare($sql);
    //Передаем значения и выполняем
    $sth->execute($data);
    
    $result = $sth->fetchAll();

    Это простой грубый пример, во многих ORM есть свои инструменты для таких штук.
    Ответ написан
    Комментировать