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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Главная проблема с тем видео которое ты смотришь на Ютубе - оно втирает тебе что писать на пхп можно не зная программирования и SQL. Разумеется, это враньё, только чтобы впарить тебе видео

    Но разумеется это не так. Лучшее что ты можешь сделать - это забыть про все о чем тебе ездил по ушам этот жулик, взять нормальную книжку, например Котерова, и учит язык нормально.

    Чтобы потом таких вопросов но возникало, в таблицу сам мог сделать нормально, такую:

    update_id - int(11) UNSIGNED
    text - varchar(500) character set utf8mb4_unicode_ci
    create_date - datetime
    Ответ написан
    Комментировать
  • Как сохранить date, php в mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    сохранить текущу дату в mysql проще простого.
    например использовать встроенную функцию now()

    что гораздо важнее - никогда нельзя писать переменные РНР прямо в запрос
    а всегда передавать их отдельно

    $query = "INSERT INTO `test` (`name_exp`, `data_exp`) VALUES ( ?, now())";
    $stmt = $db->prepare($query);
    $stmt=>bind_param("s", $name_exp);
    $stmt->execute();
    Ответ написан
    Комментировать
  • Как вернуть результаты совпадающие в join и убрать все что не совпадают в on?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Есть два основных типа джойнов - inner и outer
    inner, который обычно сокращается до просто join, находит только те записи, которые присутствуют в обеих таблицах.
    outer, который обычно сокращается до left join, возвращает все записи из левой таблицы, а из правой - только те, которым есть соответствия
    Ответ написан
    Комментировать
  • Как корректно работать с датами в MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Или единственный вариант перед сохранением в бд прогонять на стороне php дату в формат, воспринимаемый mysql'ем?

    Не единственный но единственный осмысленный.
    Тем более что там делов на одну строчку. смотрим strtotome() и date_create_from_format()
    Ответ написан
  • Кодировка базы данных для русскоязычного сайта Laravel?

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

    Автор, кодировка, которая тебе нужна, называется utf8mb4. Вот её и ставь.
    А набор правил сравнения подставится автоматически, и в целом без разницы, какой - utf8mb4_general_ci или utf8mb4_unicode_ci
    Ответ написан
    Комментировать
  • Как показать определенный текст с базы данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    отвечу на твой предыдущий вопрос, не пропадать же добру

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

    Попробуй свои силы на вордпрессе, там программирование не нужно.

    Научись устанавливать вордпресс на хостинге, минимально администрировать и менять темы.
    Потом найди человека - родственника или знакомого, который умеет, знает или делает что-то интересное, хобби там, или анекдоты хорошо рассказывает. И предложи ему сделать сайт. БЕСПЛАТНО.
    И вместе с ним делайте сайт.
    Так ты получишь минимальный опыт работы с вордпрессом и минимальное портфолио. С которым уже дальше сможешь предлагать свои услуги.
    Ответ написан
    2 комментария
  • Возможно ли такая функция?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Всё надо учить. И ООП, и MVC, и фреймворки.
    А перед этим надо освоить чистый РНР. Плюс SQL, базы данных, программирование, протоколы, безопасность, устройство серверов
    От курсов толку не будет, надо купить нормальную книжку. И не одну.
    Ну и запастись терпением.
    Годика через два-три сможешь создать нормальный веб-сайт.

    функцию создать можно.
    Ответ написан
    1 комментарий
  • Как ускорить время SELECT MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Во-первых не позорься, убери тег big data. 11 лямов - это не бигдата, а кошкины слёзки.
    Во-вторых, надо учиться задавать вопросы.
    Не вопрос вида "доктор, у меня рука болит, как сделать чтобы не болела", а подробно излагать, что за поиск, что за запрос, что за данные, что за столбец, есть ли индекс, что показывает explain.

    В текущем же виде ответ только один - помазать зеленкой добавить индекс
    если индекс есть, и поиск идет по полному совпадению, то смотреть, влезает ли индекс в память
    Если поиск идет по частичному совпадению - то выносить его в отдельный сервис, sphinx/elastic
    Ответ написан
  • Почему SELECT возвращает только данные малых таблиц?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    если запрос возврашает пустоту, то в таблице нет данных.
    если ты видишь эти данные в другой программе, значит эта программа соединяется с другим сервером
    Ответ написан
    2 комментария
  • Необходимо ли запускать Mysqli_free_result для UPDATE и INSERT запросов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для селектов тоже не нужно.
    В любом мало-мальски осмысленном коде все очистится само, как природа во время локдауна.
    Ответ написан
    Комментировать
  • Как записать в базу ссылку?

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

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

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

    $sql = "INSERT INTO t (text, author_id) VALUES(?,?)"; // заменим переменные на специальные маркеры
    $stmt = $mysqli->prepare($sql); // подготовим запрос к выполнению.
    $stmt->bind_param("ss", $text, $author); // привяжем к нему переменные
    $stmt->execute(); // и выполним его

    три простых шага, а код становится гораздо чище, безопаснее и короче.
    причем это в mysqli три, а в PDO вообще два:
    $sql = "INSERT INTO t (text, author_id) VALUES(?,?)"; // заменим переменные на специальные маркеры
    $stmt = $pdo->prepare($sql); // подготовим запрос к выполнению.
    $stmt->execute([$text, $author]); // сразу и привяжем и выполним
    Ответ написан
    1 комментарий
  • Дублирование данных при insert, где ошибка?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    про проблему тебе все уже рассказали, все изменения в БД должны быть только методом POST.

    Но поскольку вопрос изначально про класс, качестве шефской помощи перепишем его на более осмысленный, учитывая что

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

    class DatabaseMysql
    {
        public $pdo;
    
        public function __construct()
        {
            $options = [
                \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
                \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
                \PDO::ATTR_EMULATE_PREPARES   => false,
            ];
            $dbc = require(__DIR__.'/core/config/DbConfig.php');
            $this->pdo = new \PDO(
                "mysql:host={$dbc['db_host']};dbname={$dbc['db_name']};charset=utf8mb4",
                $dbc['db_user'],
                $dbc['db_pass'],
                $options,
            );
        }
        public function query(string $query, array $params = [])
        {
            $sth = $this->pdo->prepare($query);
            $sth->execute($params);
            return $sth;
        }
    
        public function insert(string $query, array $params)
        {
            $this->query($query, $params);
            return $this->pdo->lastInsertId();
        }
    }


    Хотя если честно, то я большого смысла в этом классе не вижу.
    Меня бы устроило простое расширение класса PDO типа такого
    class MyPDO extends PDO
    {
        public function run($sql, $bind = NULL)
        {
            $stmt = $this->prepare($sql);
            $stmt->execute($bind);
            return $stmt;
        }
    }

    Да, вставка будет выполняться за две строчки, а не одну,
    $pdo->insert('INSERT INTO test_table (`name`, `age`) VALUES (?,?)', ['Ivan',43]);
    $id = $pdo->lastInsertId();
    но я не уверен что стоит городить целый класс из-за одной строчки.
    Ответ написан
    1 комментарий
  • Почему выводятся значки вопросов вместо смайликов?

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

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

    да и кстати, саму таблицу тоже надо настроить на поддержку utf8mb4
    проще всего будет пересоздать таблицу с новой кодировкой
    Ответ написан
  • Почему PHP не принимает символы / ' ` и смайлики в строке input и textarea для записи в БД MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Чтобы смайлы не вызывали ошибку надо выставить правильную кодировку
    чтобы никакие символы не мешали запросу, все переменные надо передавать в БД отдельно от запроса

    // правильно соединяемся
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli = new mysqli($host, $user, $pass, $db, $port);
    $mysqli->set_charset("utf8mb4");
    // правильно вставляем
    $sql = "INSERT INTO users (name, email, password) VALUES (?,?,?)";
    $stmt= $conn->prepare($sql);
    $stmt->bind_param("sss", $name, $email, $password);
    $stmt->execute();
    Ответ написан
    Комментировать
  • Как взять строчку из файла sql (PHP)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    открываешь в редакторе свою sql файлу
    выделяешь мышкой имя, копируешь в буфер
    переключаешься в браузер, в адресную строку вставляешь из буфера, нажимаешь ентер
    Ответ написан
  • Mysql - var_dump() возращает null, как исправить?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    либо такого пользователя нет, либо ошибка
    с первым сам разберешься, а для второго напиши перед коннектом срочку
    error_reporting(E_ALL);
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    Но вообще так писать никогда не надо. если пользователь не найден то всегда будет выдавать ошибку
    Хотя бы так
    $user = $db->query("SELECT password FROM users WHERE login='Alekseyfbnd1'")->fetch_assoc();
    if ($user) {
        var_dump($user['password']);
    } else {
        echo "not found\n";
    }
    Ответ написан
    5 комментариев
  • PHP Parse error: syntax error, unexpected ограничение в хостинге, или же всё же ошибка?

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

    class Database
    {
        public $db;
    
        public function __construct($host, $user, $password, $database)
        {
            mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
            $this->db = new MySQLi($host, $user, $password, $database);
            $this->db->set_charset("utf8mb4");
        }
    
        public function query($query, $params = [], $types= '') {
            $types = $types ?: str_repeat("s", count($params));
            $stmt = $this->db->prepare($query);
            $stmt->bind_param($types, ...$params);
            $stmt->execute();
            return $stmt;
        }
    
        public function select($query, $params = [], $types= '') {
            if (!$params) {
                return $this->db->query($query);
            } else {
                return $this->query($query, $params)->get_result();
            }
        }
    }
    Ответ написан
    Комментировать
  • Структура сайта PHP/MySQL.Чекните детали?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ сильно зависит от текущего уровня.

    Если совсем ноль, то файл с настройками, файл с основным шаблоном сайта, и по паре файлов на каждую страницу - код и шаблон. Обращения идут к РНР файлам напрямую - index.php, blog.php, profile.php

    Дальше файл с кодом инклюдит настройки, выполняет код, задаёт имя файла своего шаблона, и инклюдит основной шаблон, а тот внутри себя инклюдит шаблон страницы.

    Когда этот этап пройден, прочитать статью "Симфони против чистого РНР"
    Ответ написан
    Комментировать
  • Как связать таблицы mysql?

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

    К сожалению, тот жулик, который тебе впарил это видео, не объяснил, что во-первых, программистом нельзя стать, посмотрев один ролик на ютубе, а во-вторых, этой тухлой фасолью redbean никто кроме него не пользуется. То есть даже код тебе никто не напишет.

    Поэтому садись, бери учебники, учи PHP, MySQL, и решай свою задачу. За пару месяцев справишься.

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

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