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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как правильно отметили выше, тебе не нужна "ручка для 8 класса": WHERE 1 в PDO работает точно так же.

    Другое дело, что все можно сделать гораздо проще, и без where 1, и без кучи условий (представь свой код, если в запросе будет участвовать не два поля, а три). На самом деле условий нужно не больше, чем полей в запросе:
    if (!empty($foo1)) {
        $where = "foo1= :foo1";
        $placeholders[':foo1'] = $foo1;
    }
    if (!empty($foo2)) {
        $where = 'foo2 = :foo2';
        $placeholders[':foo2'] = $foo2;
    }
    $sql = "SELECT type FROM tablepart";
    if ($where)
    {
        $sql .= " WHERE ".implode(" AND ", $where);
    }
    $stmt = $pdo->prepare($sql);
    $stmt->execute($placeholders);
    $data = $stmt->fetchAll();
    Ответ написан
    1 комментарий
  • RedBeanPHP или PDO для манипуляций с базой данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Изучать - сначала PDO, потом RedBean
    Использовать - сразу RedBean
    Ответ написан
    Комментировать
  • Как запустить межбазовый SQL запрос PHP / PDO?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Объясняю:
    Это не "PDO имеет подключение", а пользователь БД имеет доступ.
    Если указанный при подключении пользователь имеет доступ к некоторой БД, то мы можем выполнять запросы к ней.

    Отсюда можно сделать вывод: Если указанный при подключении пользователь имеет доступ к обеим БД, то такой запрос никакой не извращение, а совершенно стандартный SQL.
    Если же доступ есть к только одной БД, то запрос не пройдет. Опять же, не из-за своей нестандартности, а по банальной причине отсутствия доступа.

    А уж чрез PDO ли мы подключаемся, или через консоль - это уже без разницы.
    Ответ написан
    Комментировать
  • Правильное написание sql запроса?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Мда, тостер уже не торт.
    Сначала хотел пожурить автора вопроса, но потом увидел, ответы на его предыдущий вопрос...
    Он ведь спрашивал, как защищаться от инъекций. Но в ответ получил только глубокомысленные рассуждения о том, что SQL инъекция без XSS невозможна(!!!).

    В общем используй prepared statements и будет тебе счастье.
    Ответ написан
    2 комментария
  • Применим ли BEM в MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Могу ответить за PDO.

    1. PDO не имеет никакого отношения к запросам. ПДО не пишет за тебя SQL и не делает его безопасным. Можешь называть колонки как угодно, ПДО это до лампочки.
    2. Чтобы обезопасить данные, надо использовать **подготовленные выражения.**
    Ответ написан
    Комментировать
  • Как выводить данные по году и месяцу из одной колонки?

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

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

    Как это должно выглядеть на самом деле:

    public function countOrders($user_id)
    {
          $stmt = $this->pdo->prepare("SELECT count(1) FROM orders WHERE user_id =?");
          $stmt->execute([$user_id]);
          return $stmt->fetchColumn(); 
    }
    // и использование
    echo $obj->countOrders($_SESSION['user_session']);

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

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

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

    - куча времени, убитого на поиски, адаптацию, и допиливание означенного автопостроителя
    - эмоции вида "как эта №%;%:?У#$^№ вообще работает??!" когда через пол-года придется добавить какое-либо новое поле
    - апофеоз, когда потребуется добавить условие, не поддерживаемое автопострителем, какое-нибудь IF EXISTS

    Поверьте, затраты на написание запроса вручную (неважно, через убогое mysql_query или Доктрину) - ничто по сравнению с возможностью **прочитать и понять**, для чего, вообще, данный код нужен, и как он это делает.

    Поэтому излишняя автоматизация бывает очень вредна. И гоняться за ней не стоит.
    Ответ написан
    1 комментарий
  • Какой должен быть синтаксис SQL запроса в php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Синтаксис SQL не отличается ничем.
    Отличается только способ подстановки переменных.

    Во-первых, запросы должны исполняться не через mysql_query, а через PDO
    В-вторых, на месте переменных должны стоять знаки вопроса, а сами переменные - передаваться в запос при исполнении:
    $stmt = $pdo->prepare("UPDATE `users` SET `name`=? WHERE id=?");
    $stmt->execute(array($name, $id));
    Ответ написан
    2 комментария
  • Обмен данных между php-скриптами на разных серверах?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    • REST
    • SOAP
    • JSON-RPC <- рекомендую. так называется то, что коряво советуют остальные
    Ответ написан
    Комментировать
  • Альтернатива get_result() в mysqli?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Самая удобная альтернатива - safemysql, код сократится в два раза
    $sql = "SELECT * FROM photos WHERE id = ?s AND authkey = ?s";
    $row = $db->getRow($sql, $_COOKIE['photoid'], $_COOKIE['authkey']);
    if ($row)
    {
            $this->userLogged = true;
            $this->userData = $row;
            return TRUE;
    }

    Но использование этой библиотеки требует некоторого опыта разработки и по этой причине она подходит не всем.

    2. Менее удобная альтернатива - PDO. аргумент про "нет времени переписывать" - смехотворный.
    Во-первых, надо было думать раньше, и не говнокодить функциями mysqli в коде приложения, вместо того чтобы обернуть их в класс-хелпер.
    Во-вторых, не надо думать, что работа над сайтом закончена. Она только начинается. Учитывая, что в PDO одной строчкой делается то, на что в mysqli надо 10, то наоборот, при переходе выйдет огромная экономия.

    3. Самый простой вариант решения проблемы - сменить хостера. Но в этом случае весь адов говнокод останется на месте.

    4. Ну и самый кривой вариант - добавить больше ада и говнокода с bind_result()
    Ответ написан
    6 комментариев
  • Как сделать множественный UPDATE?

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

    ON DUPLICATE KEY - вполне определенный тип запроса, и использование его для мультиапдейта - хак, чреватый непредсказуемым поведением (например, возвращением в строй уже удаленных записей).
    Но похапе программисты, однажды узнав о таком "лайфхаке", начинают страшно гордиться таким сокровенным знанием" и пихать его по делу и без дела.
    Ответ написан
  • Как реализовать скрытие новостей из ленты у пользователя?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Почему не очень подходящая?
    Раньше эта проблема была популярной для форумов. И там как раз last activity не канала - никто не гарантировал, что в эту самую activity чувак прокликал по всем новым темам. Но для блогов ведь это не актуально: открыл ленту - считай, просмотрел.
    Можно за lastActivity считать время, когда просматривал ленту.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    > Можно это как-то реализовать средствами MySQL, не убирая переменную из строки SQL запроса?
    Нет.
    По-любому строку запроса модифицировать придется.

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

    Если никак не получается расстаться с SQL, то safemysql подойдет лучше всего.
    $data = array_filter($data); // уберём пустые поля нафиг
    $db->query("INSERT INTO ?n SET ?u", $table, $data);

    Для остальных либ принцип тот же, но придется повозиться с передачей переменного числа параметров
    Ответ написан
    Комментировать
  • Как использовать SQL-запросы в JavaScript?

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

    P.S. На текущий момент необходимо вырезать гланды.
    Ответ написан
    Комментировать
  • Как правильно сформировать SQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    SELECT * FROM sites LEFT JOIN users ON sites.id = site_id
    Ответ написан
  • SQL-запрос с отступом?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Есть большая таблица. Как выбрать из нее все данные в цикле, пачками по 10к записей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не нужно.
    Сколько надо данных - столько и запрашивай, все разом, безо всяких лимитов.
    Ответ написан
  • В чем проблема с SQL запросом к MySQL в PHP?

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