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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Потому что я тебе написал

    Добавь внутри функции $value = "%$value%";

    А ты почему-то решил что умнее всех и написал вместо этого в запросе какую-то белиберду.

    Ещё и лимит зачем-то присобачил. У тебя реально что ли такой подход к написанию программ - пробовать случайные сочетания операторов от балды - авось какое-то сработает?
    Ответ написан
  • Как получить данные из формы для подстановки в запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В контроллере
    $articles = Article::searchArticles($_GET['q']);

    ты правда настолько не понимаешь те буковки, которые тут старательно выводишь?
    Ответ написан
  • Почему происходит дублирование запроса?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    - Доктор, когда я делаю так, мне больно
    - Ну не делайте так.

    Сначала перенаправляем все запросы к несущестующим файлам на индекс
    Потом в индексе делаем безусловный запрос в бд
    И тут начинаем удивляться, почему это вдруг запрос срабатывает при каждом обращении к несуществующему файлу.
    Ответ написан
  • Как выполнить запрос через прокси в php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    site:toster.ru  Как выполнить запрос через прокси в php?
    - скрпируй этот текст в адресную строку своего браузера и нажми Ентер.
    Ответ написан
    2 комментария
  • Как сделать POST запрос через file_get_contents?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не лез бы ты в абстрактные классы пока.

    А если по теме, то тебе же ведь уже раз 5 объясняли как пользоваться твоим собственным классом БД

    $sql = 'UPDATE `' . static::getTableName() . '` SET `views` = `views` +1 WHERE id=?';
    return $db->query($sql, [$article->id]);


    Подставлять надо не урл, а найденный выше id
    Ответ написан
  • Можно ли экранировать символы в запросе?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Lost in translation.
    В оригинале ничего, естественно, про именованные параметры нет
    Ответ написан
    1 комментарий
  • Почему советуют не выбирать yii2 для разработки?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Yii2 - это фреймворк, условно говоря, второго поколения - Codeigniter, Kohana, ZF1.
    Инструмент для стиля фигак-фигак - и в продакшен.

    Начинать на нем что-либо будет недальновидно. Если осваивать Yii, то 3 версию, которая уже ближе к третьему поколению фреймворков, которое в первую очередь характеризуется модульностью и слабой связанностью.

    Но полезнее всего работать с Симфони.
    Ответ написан
  • Как скрыть ошибку Ошибка подключения: php_network_getaddresses: getaddrinfo failed:?

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

    Если ты сам код писал, то просто убери везде try catch или проверку на ошибку запроса.

    Если не сам, то просто выкини и найди нормальный.
    Ответ написан
    1 комментарий
  • AJAX, PHP, SQL обработка данных?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    С третьей попытки осилим дописать этот черезвычайно сложный код
    $sql = 'SELECT * FROM `tasks` WHERE `id`= :id' ; // запрос вроде бы правильный
    $query = $pdo->prepare($sql);
    $query->execute(['id' => $id]); // а выполнить забыли
    echo json_encode($query->fetchAll(PDO::FETCH_OBJ)); // ой, а while оказывается не нужно!
    Ответ написан
  • Как организовать обработку исключений set_exception_handler() для их красивого вывода пользователю?

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

    Другое дело что код здесь какой-то странный, и непонятно, как он вообще работает. Почему this? Это вызов внутри метода класса? Что за странная идея устанавливать обработчик ошибок внутри класса? Почему вообще обработчик ошибок устанавливается в каком-то пользовательском классе? А если будет класс Товар - у него тоже будет свой глобальный обработчик ошибок? Зачем бросать исключение если данные введены неверно?
    А, главное, какой смысл пихать ошибку в переменную? Что с ней потом делать? Солить на зиму? И да, как правильно написал OnlyMyQuestion, это не будет работать.

    Ох. Не посмотрел на юзернейм сначала. Все зря значит писал. Не дойдет.
    А жаль. Вопрос-то очень хороший, если его с умом задать.
    Ответ написан
  • Как правильно проверить массив на наличие в нем элементов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    как проверить массив на наличие в нем элементов

    Не поверишь, if ($feedback)

    <?php if ($feedback): ?>
                <?php foreach($feedback as $post): setup_postdata($post) ?>
                <?php endforeach ?>
        <?php else ?>
    No reviews found
        <?php endif ?>
    Ответ написан
    Комментировать
  • Запрос PHP+Mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если делать по-человечески
    $stmt->$mysql->prepare("UPDATE applications SET closed=1, close_user=? WHERE id = ?");
    $stmt->bind_param("ss",$close_user,$id);
    $stmt->execute();
    Ответ написан
    Комментировать
  • Скачивание файлов со стороннего сервера, как правильно организовать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    order deny,allow
    deny from all
    allow from <your ip>


    Но вообще, класть файлы, которые "никто не должен видеть" на дешевый шаред хостинг - это очень, очень богатая идея
    Ответ написан
  • Как определить является ли переменная датой?

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

    Если же тебя интересует в плане программирования, то сначала ты сам должен определиться, что считается датой.
    12.05 - дата или цена? 1574939397 - дата? 31 - дата? февраль - дата? february - дата? А какая? 01.11.01 - дата? А какая?
    Ответ написан
    1 комментарий
  • Нужно ли делать кеширование запросов и как?

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

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

    и как?
    Очень просто.
    Три простых шага:
    1. Понять, устраивает ли тебя производительность приложения. Если устраивает, то все оставить как есть.
    2. Если не устраивает, освоить профайлинг. Если это слово не упоминается в вопросе про производительность или кэширование, то вопрос можно сразу удалять. потому что он заведомо взят с потолка и не имеет смысла. По сути, профайлинг - это замер скорости выполнения отдельных участков кода для поиска узких мест - т.е. таких участков кода, которые тормозят всю программу. Это можно делать и вручную, и с помощью различных готовых инструментов. Только по результатам профайлинга, который показал конкретную причину тормозов, то самое узкое место (его еще называют bottleneck, "бутылочное горлышко"), можно приступать к оптимизации. Не кэшированию!
    3. Если профайлинг показал, что проблема в конкретном запросе к БД, приступаем к его оптимизации. Чаще всего достаточно добавить индекс или донастроить сервер.
    4. Только если все другие способы не помогли - занимаемся кэшированием. Но перед этим сначала решаем Вторую Важнейшую Проблему Информационных Технологий - инвалидации кэша. Поскольку закэшировать - это ерунда, каждый дурак сможет. Самая главная проблема не в том, как данные положить в кэш, а как и когда их оттуда удалять.
    Ответ написан
    Комментировать
  • Стоит ли хранить зашифрованные данные пользователя в Local/Session Storage на клиенте?

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

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

    После этого начинаем проблему решать.
    Значит, чтобы сэкономить время на запросе к базе, которая обычно лежит локально и обычное обращение занимает микросекуны, мы решаем закэшировать данные на клиенте. Который может быть в тысяче километров, а пинг в сотни миллисекунд - не редкость. И вот мы решаем что клиент будет с каждым запросом отправлять массив данных. Причем таких данных, которые на сервере и так. есть. Гениально!

    Стоит ли так делать и почему;
    не стоит потому что не надо высасывать проблемы из пальца.
    Какой будет прирост производительности
    Отрицательный
    Как Вы решаете подобные вопросы.
    МЫ ИХ НЕ РЕШАЕМ.
    Мы решаем реальные проблемы, объективно существующие.
    А воображаемые проблемы высосанные из пальца решать не следует.
    Ответ написан
    Комментировать
  • Где вы храните запросы к базе в коде или используйте хранимые процедуры?

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

    Если отвечтаь на вопрос буквально, то

    1. Для большинства простых операций с БД запросы вообще не пишутся, пишутся обращения к ORM. Например в вместо
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
    $stmt->execute([$id]);
    $user = $stmt->fetch();

    Пишется

    $user = $em->getRepository(User::class)->find($id);


    2. Сложные запросы с фильтрами лежат в специальных классах, которые называются репозиториями.
    Ответ написан
    7 комментариев
  • Как обойтись без параметра для parent?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Всем изучающим ООП надо метровыми буквами написать во всю стену

    НАСЛЕДУЮТСЯ КЛАССЫ, А НЕ ОБЪЕКТЫ
    НАСЛЕДУЮТСЯ КЛАССЫ, А НЕ ОБЪЕКТЫ
    НАСЛЕДУЮТСЯ КЛАССЫ, А НЕ ОБЪЕКТЫ

    И медитировать на них каждый день по часу.
    Другими словами -

    НАСЛЕДУЕТСЯ СТРУКТУРА, А НЕ СОСТОЯНИЕ

    чтобы не приходили в голову глупости типа
    мне нужно чтобы $this->test была создана в родителе и уже была в потомке


    Объекты родителя и наследника вообще никак не связаны. Объект родительского класса может быть создан, а может быть и не создан - это никак не отражается на поведении потомка. Инстанс потомка - совершенно самостоятельный объект, который не наследует ничего из состояния родителя.

    Как тебе уже сказали, ты что-то делаешь не так.
    Ответ написан