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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    я бы предложил freelansim.ru
    Ответ написан
    Комментировать
  • Как реализовать автоподгрузку полей из mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Проще всего сразу выбирать и ФИО и почту, без всяких подгрузок

    Добавлю, что если и делать подгрузку, то тогда живой поиск по фамилии, и не загружать заранее вообще ничего.
    Ответ написан
  • Выполнение нескольких Mysql запросов без разрыва соединения?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Поскольку вопрос не ясен, отвечу в целом по коду.

    Класс Модель - это НЕ обёртка для SQL запросов. И поэтому не должна наследовать mysqli.

    Логировать ошибки в бд - это ужас. Сделайте себе одолжение, логируйте в файл.

    Обработка ошибок на месте - это дважды ужас. Если подсчитать, сколько электроэнергии потратили пользователи похапе, старательно выписывая эти бессмысленные заклинания трай, кетч, лог еррор в каждой функции, то глобальное потепление уже давно бы сменилось похолоданием. Исключение - это не результат работы функции. Не надо писать трай на каждый чих, как будто это if ($result = mysql_query()). Исключение можно поймать в совсем другом месте. Наппимер, в глобальном трай кетче вокруг всего приложения. Или более интеллектуальный вариант - хендлер исключений

    exit($exception->getMessage()); - это вообще за гранью добра и зла. Какой сакральный смысл несёт кетч с таким содержимым?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    У таблиц в базе данных нет ни "начала", ни "конца". Поэтому понятие "добавить в конец" не существует в принципе. БД - это не классный журнал.

    Любой порядок записи в БД приобретают только при выводе, и если только его явно задать. Во всех остальных случаях записи выводятся втом порядке, который удобен базе.
    выбирать все строки, сортировать и выбирать с самым маленьким ID - это как-то трудоёмко)

    Так и делать. Только средствами БД.
    Открываешь для себя операторы ORDER BY, LIMIT - и вперёд.
    Ответ написан
    1 комментарий
  • Как реализовать чтобы ответ curl'a формировался в базе данных mySQL?

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

    Получив в пхп данные через курл, ты дальше забываешь это слово. И учишь новое - json.
    Поскольку именно так называется формат, в котором ты данные получил.
    Гуглишь "как раскодировать json в php".
    Заметь до базы данных мы даже не добрались еще.

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

    Дальше ты забываешь про джейсон и учишься работать с БД. Запрос на вставку.

    Дальше учишься работать с ПДО в пхп.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я в общем согласен с предыущим оратором, что PDO будет попроще в работе, тем более что твои познания в mysqli не сильно отличаются от полного незнания, и в этом смысле разница будет невелика.

    Но чтобы в прыжке не переобуваться, вот тебе код для mysqli
    в массиве $array лежат твои id товаров
    $array = [1,2,3];
    $in  = str_repeat('?,', count($array) - 1) . '?';
    $sql = "SELECT * FROM `tovar` WHERE `id` = IN ($in)";
    $stmt  = $mysqli->prepare($sql);
    $types = str_repeat('s', count($array));
    $stmt->bind_param($types, ...$array);
    $Stmt->execute();
    $result = $stmt->get_result(); // get the mysqli result
    $data = $result->fetch_all(MYSQLI_ASSOC);

    Теперь в массиве $data лежат твои товары.

    Для сравнения, код для пдо будет попроще
    Плюс, в качестве бонуса, пдо вернет массив, проиндексированный не числами по порядку, а ид товара. Тебе же надо будет как-то совмещать данные из бд с товарами, чтобы перемножить цену на количество.
    $array = [1,2,3];
    $in  = str_repeat('?,', count($array) - 1) . '?';
    $sql = "SELECT * FROM `tovar` WHERE `id` = IN ($in)";
    $stmt  = $pdo->prepare($sql);
    $stmt->execute($array);
    $data = $stmt->fetchAll(PDO::FETCH_UNIQUE);
    Ответ написан
    5 комментариев
  • Как из объекта убрать повторы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нормализовать свою базу данных.
    Ответ написан
    Комментировать
  • Почему не работает запрос sql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В ужасе убрать это адище, и сделать отдельную таблицу для картинок.
    Запросы писать с использованием подготовленных выражений.
    Не юлить и не оправдываться, а сделать и то и другое.
    Ответ написан
    Комментировать
  • Искажается хеш из MySQL при проверке пароля - как поправить?

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

    $passwd = '123123';
    $email = "test@test.test";
    $hash = password_hash($passwd, PASSWORD_DEFAULT);
    $stmt =$conn->prepare("INSERT INTO reg SET email = ?, password=?, name_reg=''");
    $stmt->bind_param("ss", $email, $hash,);
    $stmt->execute();
    $id = $conn->insert_id;
    
    $stmt =$conn->prepare("SELECT * FROM reg WHERE id=?");
    $stmt->bind_param("s", $id);
    $stmt->execute();
    $result = $stmt->get_result();
    $userData = $result->fetch_assoc();
    
    $checkPasswd = password_verify($hash, $userData["password"]);
    var_dump($hash, $userData["password"],$passwd === $userData["password"],$checkPasswd);


    Запустить этот код и убедиться, что на удивление, База данных ничего с твоими данными не делает, возвращает в точности то же самое что клал (ну или, как вариант, с удивлением обнаружить что длина поля совсем не 128 букв например).

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

    Если $hash, $userData["password"] выглядят одинаково, но $passwd === $userData["password"] возвращает false, то выводим $hash, $userData["password"] через urlencode() и смотрим разницу.

    Основная идея тут в том, чтобы проверять каждое свое предположение. Причем не методом высасывания из пальца, а самым что ни на есть наглядным способом. То есть проверять ровно то, что клал в конкретную таблицу БД, а не то что когда-то давно куда-то клал, но куда и когда не помню.
    Ответ написан
    2 комментария
  • Как выводить массив в цикле в шаблоне по порядку?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    У тебя вшаблоге не должно быть строк с "Москва", "АБВ".

    Эти строки должны лежать в базе.
    Там же, где и ссылки
    И выводиться тем же циклом
    Ответ написан
    5 комментариев
  • Не выводится цикл из бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Учись формулировать свои мысли. Причем сразу в гугл.

    У тебя не "не выводится", а "выводится только последняя запись". Вот и пиши это в гугл. Эта дурацкая ошибка весьма популярна среди новичков и ответов найдется море.
    Ответ написан
    Комментировать
  • Как составить SQL запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В общем, не надо мудрить, все должно быть в одной таблице.

    В случае, когда таблиц несколько, сначала вставляем в первую, получаем идентификатор, и используем его при вставке в остальные.
    Ответ написан
    1 комментарий
  • Почему данные в малой таблице читается медленнее, чем в большой?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1) Почему данные в малой таблице читается медленнее, чем в большой?
    2) Скорость чтения бд в маленькой таблице. Она гораздо выше скорости работы с большой

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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    $row = $conn->query("SELECT group_concat(age), sum(age) FROM table")->fetch_row();
    echo $row[0];
    echo "<br>";
    echo $row[1];
    Ответ написан
    2 комментария
  • Регистрация и авторизация mysqli?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну вот пример авторазиции
    На как правильно написали выше, когда что-то не работает, надо не искать некий волшебный рабочий код, а отлаживать тот который есть. потому что не работать может вообще любой код. Будь у тебя хоть супер- идеальный код, но если колонки в базе нету, то он никогда не заработает.
    Ответ написан
    2 комментария
  • Как исправить ошибку PHP PDO?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну если "в переводя" и так понятно, то какой смысл еще и на тостер идти?
    Ответ написан
    9 комментариев
  • Снова про кеширование запросов к БД, как сделать?

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

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

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

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

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

    $article->update($_POST);

    и все будет прекрасно обновляться.
    Ответ написан
    1 комментарий