Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
  • Как посчитать все строки в запросе с SELECT > JOIN > SELECT и LIMIT?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Запрос - какая-то адская фантасмагория. Нахрена здесь джойн, если из а берется только ид, который равен b.meta_value? Я уже не говорю про джойн с селектом и груп бай.
    Такое ощущение, что запрос писал сумасшедший под веществами в состоянии белой горячки.

    все что здесь нужно - это

    SELECT SQL_CALC_FOUND_ROWS b.id, b.meta_name, b.meta_value
    FROM b WHERE b.meta_name = '***'
    ORDER BY b.meta_value DESC
    LIMIT 0, 20;
    SELECT FOUND_ROWS()


    После объяснений в комментах стало понятно, что нам нужен подзапрос

    SELECT SQL_CALC_FOUND_ROWS a.id, 
    (SELECT b.meta_value from b where b.meta_name=a.id order by b.id limit 1) as lastprice
    FROM a LIMIT 0, 20
    Ответ написан
  • В консоли bin/console кидает Notice: unserialize(): Error at offset 48 of 50 bytes, где логи?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Чтобы получить более подробное сообщение об ошибке, надо запускать команду с параметром -v
    Ответ написан
    5 комментариев
  • RedBeanPHP или PDO для манипуляций с базой данных?

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

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

    Симфони же сразу приучает, как делать правильно: не дает намусорить в контроллере, приучает делать хелперы без жестких зависимостей, показывает, как делать репозитории для обработки данных. Да это труднее, но избавит от больших проблем в будущем.

    При наличии готового проекта лучше всего изучать именно на этом готовом проекте. Практика в 100 раз лучше любой теории.
    Ответ написан
    2 комментария
  • Возможно ли создать колонку внутри которой только одна ячейка имеет права содержать в себе значение?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нельзя.

    В mysqli нет никаких колонок вообще. Это API, набор функций PHP. Его используют самые необучаемые пхпшники, которых отлучили от mysql_query, и которые не сумели освоить ничего более прогрессивного.

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

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

    На сайте, который делал криворукий пхпшник, старательно, как они любят, выписывая по 55 условий при проверке пароля, и на каждое выводя отдельное сообщение об ошибке, проверить в теории можно.
    На нормальном сайте - нельзя, и это замечательно.
    Ответ написан
    Комментировать
  • Каков принцип работы apache?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Яндекс почта для домена.
    Рулить сможет даже секретарша.
    Ответ написан
    5 комментариев
  • Как запустить межбазовый SQL запрос PHP / PDO?

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

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

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

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

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

    Чтобы найти действительно полезный сайт, который сначала создан, чтобы делиться информацией, поддерживается специалистом в своем деле, и только потом монетизируется, надо перерыть тонну шлака, который создан ради минетизации, а контент получен методом "пропарсить инфу с других сайтов по схожей тематике и разместить ее на своем сайте, переставив слова местами".
    Ответ написан
    4 комментария
  • FOSUserBundle как включить соли? Зачем нужен confirmation token?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Да, это разные версии, но только не FOS, а Симфони.
    Сейчас соль генерируется и хранится вместе с хешем, с использованием функции password_hash()
    Поэтому содержимое поля salt на данный момент игнорируется, а в будущем, думаю, будет удалено.

    По confirmation_token рекомендую проверить после регистрации и до подтверждения.
    Это поле должно быть заполнено только в этот период, в остальное время оно и должно быть пустым.
    Ответ написан
    Комментировать
  • Скорость записи в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как всегда, милилон ответов, все не в кассу.

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

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link->begin_transaction();
    $stmt = $link->prepare("UPDATE `price` SET `price`=? WHERE `name`=?");
    $stmt->bind_param("ss", $price, $name);
    foreach ($jsondate as $k => $value) {
        foreach ($value as $bo) {
            $name = $bo['name'];
            $price = $bo['price'];
            $stmt->execute();
        }
    }
    $link->commit();
    Ответ написан
  • Где взять легковесный Query Builder?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    https://github.com/auraphp/Aura.SqlQuery
    www.notorm.com
    тысячи их

    Для mysqli порекомендую свою SafeMysql
    Если запрос не надо собирать динамически, то код получается куда проще , читабельнее и гибче, чем с любым билдером. Попробуйте к примеру выполнить через fluenpdo запрос insert ignore или on duplicate
    Ответ написан
    3 комментария
  • Правильное написание sql запроса?

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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как думаешь, за что отвечает параметр --no-warmup?
    Ответ написан
    2 комментария
  • Почему очень долго выполняеться запрос к БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    > Если этот же запрос сделать в phpmyadmin:

    phpmyadmin - убогая погремушка для ламеров. измерять по нему скорость выполнения запроса - это все равно что смотреть время на стоящих часах. Два раза в сутки покажет правильно...

    Во-первых, phpmyadmin подставляет limit для твоего запроса, и запрашивает всего 20 строк из твоих 100 тысяч. Попробуй запросить все, и посмотри, сколько времени будет выполняться. Если вообще выполнится.
    Во-вторых, даже для запроса с лимитом, 0.0002 -это мало. Результат явно идет из квери кеша. Один раз выполнил, дальше запрос закэшировался, и радостро выдает тупо результат.
    В-третьих, как тут уже все сказхали, делать таблицу на сто тыщ строк - это совсем за пределами осмысленности. Кто будет это читать? Даже если делаешь XLS.

    В общем, сначала изменить, сколкьо времени выполняется запрос ЦЕЛИКОМ, а потом сократить количество запрашиваемых строк до разумных значений.
    Ответ написан
  • Как переменной присвоить столбец?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Такой ерундой никто не занимается.

    Во-первых, $zapros в запросе - это готовая инъекция.
    Во-вторых, распихивать результат по отдельным массивам, это какой-то детский сад. В этом нет ни малейшего смысла, поскольку к любой колонке можно обратиться из единого массива
    foreach ($all as $row) echo $row['Type'];
    foreach ($all as $row) echo $row['Field'];

    В-третьих, если надо получить только один столбец, то тут mysqli как всегда проигрывает PDO:
    $stolbets = $pdo->($query)->fetchAll(PDO::FETCH_COLUMN);
    Ответ написан
  • По какому принципу создавать контроллеры в MVC?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Контроллер должен быть тонким.
    А тонких не проблема сделать несколько - все равно никакой функциональности в них быть не должно - она должна лежать в репозитории и хелпере.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В двух словах - бессмысленный и небезопасный.

    Класс не использует главные преимущества PDO - подготовленные выражения и возможность возвращать результат в десятках различных форматов. В итоге мы имеем SQL инъекцию в каждом запросе, а результат всегда возвращается только в виде списка.

    При этом написана куча функций, чтобы сэкономить себе два слова при написании SQL запроса, ценой создания нечитаемой абракадабры.
    Попробуй написать пример использования функции select() для запроса "SELECT access FROM user WHERE id=1" , а потом посмотри на него и честно скажи - можно ли без документации понять, что и откуда эта функция должна выбрать и с какими условиями.

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