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

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

    вот так и формулируй - как заблокировать таблицу на чтение
    а не какой-то абстрактный "участок кода"
    Ответ написан
    4 комментария
  • Как оптимизировать код?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. учить SQL и вместо этого циклического ужаса сделать один запрос
    SELECT hour(time) hour, count(*) count FROM hosts WHERE id_sait = ? 
    AND time BETWEEN unix_timestamp(curdate()) and unix_timestamp()
    GROUP BY hour(time);

    2. комбинированный индекс на id_sait, time
    Ответ написан
    6 комментариев
  • Как правильно выводить информацию из масива?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В данном конкретном случае
    $data = $stmt->fetchAll(PDO::FETCH_COLUMN);
    но на будущее попробуй понять, что такое вложенные массивы.
    в частности сравни вывод print_r двух массивов
    Ответ написан
    2 комментария
  • Как оптимально проверить строку на наличие эмодзи (PHP + MySQL)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я конечно не спец в битриксе, но неужели там нельзя использовать нормальную кодировку, которая поддерживает все символы, utf8mb4?
    Ответ написан
    2 комментария
  • Как вывести из БД данные в массив PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В цикле.
    Пример есть в любом руководстве по РНР.
    Ответ написан
  • Почему упала производительность базы MySQL при переносе на новый сервер?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Самый тупой вариант: в "самой последней версии mysql" query cache отключен по умолчанию. Но если речь о конкретном запросе с воспроизводимым результатом, то наверное дело не в этом.

    Поэтому надo задавать не вопрос "почему упала в два раза после переезда", а надо разбираться с конкретным запросом.
    Вообще, вопрос конечно из серии "Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит". Неужели так трудно задать конкретный вопрос?
    • создали два LXC контейнера... С какими характеристиками?
    • поставили последнюю версию MySQL... Какую?
    • на некоторых запросах... Каких?
    • меняли настройки базы... Какие?
    • перерыли рекомендации... Какие?


    Всё-таки, вера советского человека в волшебную палочку или там цветик-семицветик нестребима. Что ламер в соседнем вопросе, что владелец прошаренного сервера, могут осилить только один сакраментальный вопрос, "Подскажите, в чем может быть проблема?". С наивной верой в то что решение проблемы - это не сложный и многоступенчатый процесс, для которого нужно предоставить как можно больше информации, а где-то просто есть заветный гвоздик по которому надо просто ударить волшебным молоточком, и всё сразу заработает как надо.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ты не понимаешь одной очень простой вещи. Что база у тебя реляционная. Это всё.
    Как только поймёшь - сразу станет ясно, что в таблице пользователей поле id необходимо.

    В реляционной базе данных таблицы между собой связаны. И что ты будешь писать в связанную таблицу - е-мейл? Серьезно? А если пользователь поменяет его? Будешь по всем таблицам бегать и менять?

    У строки в бд, если она хранит какую-либо информацию, должен быть уникальный, неизменяемый, прикрепленный к ней навечно идентификатор.
    Чтобы независимо от изменения самих данных в строке, ее всегда можно было идентифицировать.
    Ответ написан
    2 комментария
  • Как сделать вывод данных с текущего аккаунта через MySQL и PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Смотри внимательно.
    1. Надо стартовать сессию
    2. Надо правильно соединиться с БД
    3. Надо не хранить пароль в открытом виде
    4. Надо не пихать переменные прямо в запрос, а всегда передавать отдельно

    session_start();
    $login = $_POST['login'];
    $password = $_POST['password'];
    
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysql = new mysqli ('localhost','root','root','register-bg');
    $mysqli->set_charset($charset);
    
    $stmt = $mysql->prepare("SELECT * FROM `users` WHERE `login` = ?");
    $stmt->bind_param("s", $login);
    $stmt->execute();
    $result = $stmt->get_result();
    $user = $result->fetch_assoc();
    
    if($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
    }


    про password_verify прочтешь самостоятельно

    потом на другой странице
    1. стартовать сессию
    2. получить из неё id
    3. по id получить из базы юзера

    session_start();
    
    include 'mysqli.php';
    
    $stmt = $mysql->prepare("SELECT * FROM `users` WHERE `id` = ?");
    $stmt->bind_param("s", $_SESSION['user_id']);
    $stmt->execute();
    $result = $stmt->get_result();
    $user = $result->fetch_assoc();
    
    echo $user['money'];


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

    если будут вылезать ошибки, их надо гуглить
    Ответ написан
    9 комментариев
  • Почему не добавляются/редактируются данные?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В том что ошибка подключения
    Ответ написан
  • В чем проблема PDO?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это всё какой-то чудовищный карго культ говнокод.
    • особенно функция setConnection, которая вообще ни в какие ворота не лезет, будучи абсолютно, эталонно бессмысленной.
    • И getConnection от неё не далего ушла. То есть внутри все равно ад с глобалсами, но снаружи у нас все выглядит прилично - функция.
    • ПДО, разумеется, используем без подготовленных выражений. Зачем вообще городить авторизацию если любой школьник сможет авторизоваться без всякого пароля через SQL инъекцию?
    • Ошибка соеднинения пдо выводится в красивой красной рамочке. Как будто юзеру прям так интересно читать что у тебя база легла. При этом сам ты этого не узнаешь. Для кого это всё пишется - загадка.


    Ну и традиционно, просто пострясающий в своей осмысленности код:
    Присваиваем переменной $result булево значение и дальше пишем
    if ($result){
        return true;
    }else{
        return false;
    }
    Ответ написан
    Комментировать
  • Как автоматически удалять символы если превышает длину Mysql?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я создал Class в котором у меня все функции по работе с БД.

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

    Поэтому у тебя не должно быть никакого класса Functions
    Должен быть класс DB, в котором будет два метода - конструктор, в котором создаётся соединение с БД, и метод для выполнения подготовленного запроса. Например такой

    Дальше ты делаешь классы-модели для работы с определенными наборами данных. В самом простом варианте - с одной таблицей в БД.
    И передаёшь экземпляр класса DB в конструктор.

    file_put_contents и die(); - абсолютно бессмысленные телодвижения
    если не писать try..catch, то РНР сделает абсолютно то же самое: залогирует ошибку и остановит выполнение скрипта
    Ответ написан
  • Mysql как получать следующий существующий id?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    в самом тупом варианте
    SELECT id FROM table WHERE id > ? LIMIT 1
    но зависит от задачи
    возможно, следует сразу запросить все ид одним запросом и перебирать по одному
    или вообще ничего не запрашивать, а тупо обновить все записи одним запросом
    Ответ написан
    3 комментария
  • Нужно ли проверка INSERT, UPDATE, DELETE?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хороший вопрос, ответ на который знают очень немногие.
    Чтобы на него ответить, надо обладать опытом как программиста, так и пользователя веб-сайтов. А это уникальное сочетание. Большая часть пользователей РНР не обладает ни тем ни другим, очень небольшая часть каким-то одним, и только единицы - и тем и другим.

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

    Поэтому

    Соответственно, если у тебя запрос аяксом, то проверяешь код ответа и пишешь 'Something went wrong. Please try again' яваскриптом.
    Ответ написан
    Комментировать
  • Как исправить ошибку Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В общем, чтобы избавиться от этой ошибки, просто надо в пдо отключить режим эмуляции
    а вот сделать сортировку будет сложнее.
    по-хорошему надо вбить в функцию массив возможных вариантов и проверять по нему
    Ответ написан
    1 комментарий
  • У меня проблема Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in. Как исправить?

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

    Соединяемся как написано здесь.
    Пароль пишем в базу так, как написано здесь.
    Проверяем логин и пароль как написано здесь.
    Ответ написан
    Комментировать
  • Как сделать так, чтоб поле id в таблице всегда начиналось с 1?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.

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

    Не надо смотреть вообще на эти цифры, они не для этого. И с какого числа они начинаются, тебя не должно волновать
    Ответ написан
    Комментировать
  • База данных для корзины?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Но проблема в том что при обновлении нужно чтоб он был самым последнем в таблице

    Не нужно

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я переписал твой код чтобы он был надёжным и безопасным

    $host     = 'host';
    $database = 'name';
    $user     = 'user';
    $password = 'passw';
    $charset = 'utf8mb4'; // тоже важно!
    
    // обязательно выставляем режим информирования об ошибках
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    // подключаемся к серверу
    $link = mysqli_connect($host, $user, $password, $database);
    // выставляем кодировку
    $link->set_charset($charset);
    
    $login   = 'oleg33';
    $password = '04bf6c984b760ed67e3a9f0b5d9b4cc7';
    $email  = 'gggggf1';
    
    // пишем запрос, заменяя все переменне на знаки вопроса
    // имя таблицы пишем прямо в запросе, делать его переменной нет ни имлейшего смысла
    $sql = "INSERT INTO users (`login` , `password`, `email`) VALUES (?,?,?)");
    // подготавливаем запрос
    $stmt = $link->prepare($sql);
    // привязываем к нему переменные
    // сначала в кавычках пишем столько букв s сколько переменных, а потом сами переменные
    $stmt->bind_param("sss",$login,$password,$email);
    // выполняем запрос
    $stmt->execute();
    Ответ написан
    1 комментарий
  • Почему у php и mysql разное время?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Установить часовой пояс для РНР
    • Глобально - в php.ini: date.timezone = Europe/Moscow
    • Локально - в едином для сайта скрипте настроек: date_default_timezone_set('Europe/Moscow');

    Установить часовой пояс для Mysql
    • Глобально - в my.cnf: default-time-zone='+03:00'
    • Локально - запросом после коннекта: SET @@session.time_zone = '+03:00';
    Ответ написан
    Комментировать