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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Единственное неудобство PDO в том, что execute() не возвращает стейтмент. Это легко исправить, как показано в коде из ответа выше.

    Получаем 2 строки:
    $sql = "SELECT ...";
    $data = DB::prepare($sql)->execute([$param1,$param2, ...])->fetch();

    Вместо fetch() подставляем любой желаемый вариант получения данных.

    Но можно, в общем, и свой враппер написать, попроще

    function pdq($sql, $params = array())
    {
        global $pdo; 
        $stmt = $pdo->prepare($sql);
        $stmt->execute($params);
        return $stmt;
    }
    $sql = "SELECT ...";
    $data = pdq($sql, [$param1,$param2, ...])->fetch();


    $pdo получать как написано здесь phpfaq.ru/pdo#connect
    Ответ написан
    Комментировать
  • Что делать если PHP возвращает ошибку при получении данных?

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

    Перед коннектом пишешь
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    И чтобы духу этого идиотского or die() в твоих скриптах больше не было.
    Ответ написан
  • Почему такое количество результирующих строк ?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Отучайся задавать вопросы по мелким техническим деталям, в которых ты запутался.
    Спрашивай сразу про основную задачу, чтобы тебе объяснили, как ее делать ПРАВИЛЬНО.

    "я получаю по одной строке из бд" - ЗАЧЕМ?
    "запросом выше я хочу узнать, а последняя ли" - зачем?
    Ответ написан
  • Как вывести записи в массив?

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

    Вот это и есть главная проблема.

    Слова эти должны лежать в отдельной таблице, в столбик.

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

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

    Специально для несчастных мигрантов с mysql_query: статический PDO wrapper

    <?php
    include_once('connect.php');
    function get_data($uid)
    {
        $sql = "SELECT * FROM test_db_vytrat t 
               LEFT JOIN test_db_vytraty_cat c ON t.cat=c.cid 
               WHERE t.user_id = ?";
        return DB::prepare($sql)
            ->execute([$uid])
    #        ->fetch()
            ->fetchAll()
        ;
    }
    $data = get_data(1);
    var_dump($data);
    Ответ написан
    Комментировать
  • Как обойти множество JOIN в EAV ?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Монга как раз решает проблему таблицы связей. Собственно, потому ее тебе и рекомендуют, что она решает ту самую задачу, что ты сейчас описал - избавляет от связей. В ней можно тупо писать "цвет: красный, обогрев: есть, минимальная температура охлаждения: 16" - вот примерно так запрос и выглядит, в виде JSON. Но тут могут быть проблемы с индексами (индексируемых полей тысячи, столько индексов не напасешься), а перебором много не наищешь.

    2. И тут приходит на помощь свинкс.
    Самый тупой вариант - генерировать т е к с т. Сфинкс же полнотекстовый поиск? Ну вот и нагенерировать текст, такой же, как я выше написал, в котором перечислены все параметры. Ищет замечательно. Для более продвинутых вариантов гуглить sphinx faceted search
    Ответ написан
  • Верна ли логика работы с БД (разграничение прав и постоянное подключене) ?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Смысла нет.

    Проблема начинающих защищателей, которых ты начитался, состоит в очень скудных знаниях об SQL инъекциях. И свои советы они строят исходя из этих самых знаний. Состоящих из ровно одного примера про Бобби-фейсом-об-тейбл.

    Суровая же правда жизни состоит в том, что инъекция через SELECT может быть куда более разрушительной.

    Поэтому заниматься такой ерундой, как разделение прав, не нужно. Нужно соблюдать одно очень простое правило при работе с БД - ЛЮБЫЕ данные должны попадать в запрос только через плейсхолдер - и проблема инъекций решена.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Есть несколько бд, которые используются разными источниками (сайт1 -> бд1, сайт2 -> бд2, и т.д.)


    Сдается мне аффтар, что ты фантазируешь. То у тебя сайты, а потом уже вдруг таблицы.
    Разумеется, такая система нежизнеспособна, и я сильно сомневаюсь, что она существует в реальности. Поэтому лучше бы тебе отказаться от этой фантазии и делать по-человечески.
    Ответ написан
  • Как правильно вывести запрос LEFT JOIN MYSQL ?

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

    Ладно, я не беру тех местных приматов, у которых в голове не помещается в голове больше одной мысли. С них спроса нет. Я обращаюсь к тем, у кого здравый смысл в принципе присутствует, но по какой-то неведомой науке причине отключается при заходе на сайт тостер.ру.

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

    В таких случаях надо бить молотком по голове, объясняя, что наличие таблиц `members` и `members_two` содержащих одни и те же поля, и ТОЖЕ НУМЕРОВАННЫЕ - это продукт адовой неграмотности, и непонимания, что такое база данных вообще.

    Объясняя, что за такие вещи этот несчастный школьник будет гореть в аду, и что таблица должна быть одна, и в ней должно быть поле, в котором ставится признак "two". А все нумерованные поля v1 v0 должны писаться в отдельную таблицу, из трех сполбцов - member_id, v, значение
    Ответ написан
    Комментировать
  • Вывод данных из mysql в таблицу?

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

    Таблица должна быть ОДНА. В которой эти "таблицы" должны быть расположены вертикально
    id ученика | Предмет 8 | значение

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Минусы стандартные.
    • На миллион файлов одного уровня вложенности хватит, но на десяти уже начнутся проблемы, когда в каждом каталоге будет по несколько десятков файлов. Я помню про "не больше ляма", но "640К памяти хватит всем...", ога.
    • Заведомо неуникальные имена файлов пользователей. Не забыть прибавлять к хэшируемой строке микротайм.
    • Следить, чтобы у хэшируемой строки не было общего префикса (скажем, полного пути к файлу на диске) - тогда первые символы хэша будут распределяться неравномерно, и неравномерно заполнять каталоги.
    Ответ написан
    Комментировать
  • Как удалять пользователя из БД без удаления id?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    ТЕБЕ
    ЭТО
    НЕ НУЖНО
    Ответ написан
    Комментировать
  • Как можно проверить код на безопасность?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Фильтрация от опасных символов.


    Можно не проверять. Сайт дырявый.
    Ответ написан
  • Как правильно организовать фильтры поиска по товрам ?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если отбросить все попытки объяснений (фантастически бессмысленных) из предыдущего ответа, и оставить только рекомендации, то придраться будет не к чему.

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

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

    Если очень сильно хочется сократить количество таблиц - стоит посмореть в сторону нереляционных БД - например Монгу, которая идеально подходит для хранения каталога товаров.

    Для поиска в любом случае надо использовать сфинкс - он для этого предназначен, и прекрасно справится с запросом "красный айфон" без какой-либо специальной подготовки. Как следствие, в силу использования внешнего поиска, мы оказывается отвязаны от структуры таблиц - она может быть любой, и для поиска не имеет значения.
    Ответ написан
  • Как увеличивать инкремент, если есть поле unique ?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Первое, что надо узнать - ЗАЧЕМ тебе это нужно - " делать автоинкремент только тогда, когда он добавил реально запись"? Какая тебе разница, какое значение у этого поля?

    Отвечать подробно
    Ответ написан
    Комментировать
  • HTML5/CSS3/JavaScript vs PHP кто победит?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Жалоба на вопрос: вопрос ведет к дискуссии или спору.
    Ответ написан
  • Как выполнить скрипт в точное время?

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

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

    Попробуй - тебе обязательно понравится.
    Ответ написан
    21 комментарий
  • Не работает mysqli_data_seek, что не правильно?

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

    В текущем виде этот класс не несет ни малейшего смысла. Надо его выкинуть и работать с mysqli напрямую. Для этого надо изучить примеры из документации.
    После того как получится освоить базовые операции и понять назначение основных функций, можно будет потихоньку начинать пробовать писать свой класс.
    Ответ написан
  • Где лучше фильтровать данные из БД?

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

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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тут действительно можно выкинуть кучу бесмысленного кода.
    $sql = "SELECT ...";
    return $this->database->query($sql)->fetch_assoc();

    - это ВЕСЬ код, который нужен.

    При отсутствии совпадений ни этот код, ни код приведенный в запросе, никакой ошибки выдавать не будет. Автору померещилось.

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