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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Учить РНР надо не по написанным нубами при царе Горохе руководствам, а по нормальным учебникам.
    Или хотя бы по нормальным ответам на тостере.
    https://qna.habr.com/q/918033#answer_1847841

    Никакого $data в запросе быть не должно. Любые переменные должны отправляться в БД отдельно
    Для этого надо
    Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    Привязать переменные к запросу.
    Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();


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

    И тогда никаких ошибок запроса уже никогда не будет. Не говоря уже про инъекции.
    Ответ написан
    2 комментария
  • Почему sql запрос не выполняется?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Когда запрос спотыкается на имени таблицы или колонки, то сразу идем сюдой, и ищем наше имя колонки: https://dev.mysql.com/doc/refman/8.0/en/keywords.h... (только если после нее стоит буковка (R). Слово без неё проблем не вызывает)
    И после этого идем читать про identifier quote character, https://dev.mysql.com/doc/refman/8.0/en/identifier...
    Ответ написан
  • Как правильно составить SQL запрос SELECT PDO PHP для получения данных по двум строкам?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • При изменении значений в ячейке таблицы вылетает ошибка mysqli_query(): Couldn't fetch mysqli, где я ошибся?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Couldn't fetch mysqli возникает в том случае, если соединение с БД уже было закрыто.
    Есть такие старательные любители везде пихать mysqli_close
    Надо им всегда бить по рукам, и отучать писать эту бессмысленную строчку.
    Ответ написан
    3 комментария
  • Нормально ли делать UNION 8 раз) вообще влиют ли это на скорость?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если данные должны суммироваться, то никакой запятой в них быть не должно. Десятичный разделитель для данных в mysql - ТОЧКА.
    И числовые данные надо хранить в предназначенных для этого типах полей.
    Со списком можно ознакомиться в документации: https://dev.mysql.com/doc/refman/8.0/en/numeric-ty... и выбрать наиболее подходящий. Это может быть либо тип с фиксированной точкой (DECIMAL), либо с плавающей (FLOAT).
    Ответ написан
    9 комментариев
  • Верно ли решены задачи на текущую дату, извлечение данных (базовые знания SQL)?

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

    sql-ex.ru вполне жив и помирать не собирается.
    Настоятельно рекомендую не только их задачки но и учебный курс.
    чтобы не писать такую откровенную белиберду, а производить SQL, который хотя бы отдаленно решает поставленную задачу.
    Ответ написан
    Комментировать
  • Как заменить строку на цифры у оператора IN?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Цифры тут как раз совершенно не обязательны, а вот знаков вопроса должно быть больше. На каждый айди.
    ПХП не джинн из бутылки, чтобы отгадывать, что тут имелось в виду - целиком строка или отдельные значения.
    Если нужны отдельные значения, то и передавать их надо по отдельности, n'est pas?

    Это конечно не так красиво выглядит, но других вариантов все равно нет

    $array = [8,10,11]; 
    $in  = str_repeat('?,', count($array) - 1) . '?';
    $sql = "SELECT * FROM users WHERE id NOT IN ($in)";
    $stmt  = $db->prepare($sql);
    $stmt->execute($array);
    Ответ написан
    5 комментариев
  • Почему BETWEEN не выдает выборку по указанному диапазону?

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

    Сейчас же мы вообще без понятия, где тут криворучко - в бд, в запросе, в говнокоде пхп.

    Если вопрос про between, то в нем не должно быть никакого пхп.
    А должен быть sql, причем целиком, а не какой-то огрызок.
    И заодно пример данных из базы
    Ответ написан
    Комментировать
  • Как записать полученные данные в БД php+sq?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    $stmt = $mysqli->prepare("INSERT INTO table (id1, id2) VALUES (?,?)");
    $id1 = 1;
    foreach( $_POST['id'] as $id2);
        $stmt->bind_param("ss", $id1, $id2);
        $stmt->execute();
    }
    Ответ написан
    7 комментариев
  • Как в столбец SQL-таблицы записать массив?

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

    так работают базы данных
    Ответ написан
    Комментировать
  • Как отсортировать по алфавиту и сохранить по ID?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    $sql = "SELECT * FROM `product` ORDER BY name";
    $data = $mysqli->query($sql)->fetch_all(MYSQLI_ASSOC);
    foreach ($data as $i => $row) {
        echo ($i+1), $row['name'], $row['price'];
    }

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

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

    сконвертировать можно обычно с помощью strtotime()/date()
    Ответ написан
    Комментировать
  • Как правильно создать таблицу в которой будет храниться инфо о посте?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Гугл поступает совершенно правильно. Потому что делать такую белиберду никому просто и в голову не придёт.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это какой-то странный говнокод, который заведомо не будет работать, с любым запросом
    Если в запросе используются параметры (:idArt) то его надо выполнять не через query|, а через prepare
    "Все комментарии" этот запрос не вытаскивает, а только их количество.
    Если у вас есть идентификатор статьи, то зачем вытаскивать по имени?
    По имени вообще никогда нельзя ничего вытаскивать. Имя может поменяться. Для идентификации статьи всегда надо использовать только id
    $sql = "SELECT *, (SELECT COUNT(id_art) FROM base_comments WHERE id_art = a.id_article) all_comments,
    FROM base_articles LEFT JOIN base_users ON base_articles.id_author = base_users.id_user 
    WHERE id_article = ?)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$idArt]);
    $articleInfo = $stmt->fetch();


    А сами комментарии, если надо, то как уже говорилось выше, запрашивать отдельным запросом.
    Ответ написан
    2 комментария
  • Какие знания по базам данных необходимы начинающему back-end разработчику?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Судя по совершенно дремучим вопросам, которые задают на тостере, самая большая проблема у начинающих разработчиков - это принцип работы реляционной базы данных, представление данных в нормальной форме, базовые варианты связей, атомарность данных.
    Я недавно нагуглил книгу Святослава Куликова, полистал - вроде бы то что надо.
    https://svyatoslav.biz/relational_databases_book/

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

    Ну и базовый SQL.
    Про "сейчас многие и без него обходятся" - это чушь собачья.
    "Обходятся", во-первых, только на красивых картинках, не имеющих отношения к реальной жизни.
    А во-вторых, когда "обходятся", то в голове все равно держат конечный SQL. Если не понимать, что там тебе настроит ORM, то потом будет очень больно.
    Ответ написан
    Комментировать
  • Как вставить метод POST в SQL запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    https://qna.habr.com/q/918033#answer_1847841

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    "Хочу надевать носки на голову. Есть ли в этом смысл, или лучше надевать на ноги?"

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