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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    dependency injection
    Ответ написан
    Комментировать
  • Какие типы данных использовать в bindParam в PDO?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никакие. подставляй переменные прямо в execute()

    $sth = $dbh->prepare('SELECT * FROM table WHERE col = :col');
    $sth->execute(['col' => $col]);

    Никогда не надо разводить писанину на пустом месте

    Проблема же, которую ты соизволил озвучить в тексте вопроса, не имеет к PDO вообще никакого отношения и решается оператором космический корабль:

    SELECT * FROM table WHERE col <=> :col

    с ним третий вариант найдет те записи у которых значение NULL
    Ответ написан
    Комментировать
  • Как записать json массив в mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Комментировать
  • Как правильно отфильтровать данные из $_POST?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Для дефолтной конфигурации mysql - влияет.
    2. В данной формулировке, как это почти всегда бывает для сферических вопросов в вакууме - ОДНОЗНАЧНО НЕТ, и НИ В КОЕМ СЛУЧАЕ.

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

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

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

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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    вместо
    $mysql = new mysqli('localhost', 'root', '', 'factotum_base');
    
    if ($mysql) {
     	echo ":)";
     } else {
      echo ":(";
     }

    Написать
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysql = new mysqli('localhost', 'root', '', 'factotum_base');

    А этот ужас
    if ($res == false) {
        printf("Ошибка при выполнении запроса\n");   //вылетает ошибка :(
      } else {
        printf("Запрос выполнен :)");
      }

    убрать целиком
    Ответ написан
  • Не работает create temporary table в php. Что не так?

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

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

    Я бы разделил валидацию и создание заказа.
    Для валидатора ошибки введенных данных - это не исключителная ситуация, а соверешнно штатная.
    То есть можно проверить результат валидации простым условием, без всяких исключений.


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

    Но вот код, который лежит внутри catch(OrderException $ex){ является избыточным. Логирование ошибки и вывод стандартного сообщения клиенту - это то, что должен делать централизованный обработчик ошибок, который в любом случае должен присутствовать в приложении. То есть здесь этот код явно лишний.
    Ответ написан
    8 комментариев
  • Как реализовать прием callbackов, по сути прием и запись в БД параметров get запросов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Чтобы было понятно, звучит он примерно так: "Подскажите, как доехать на машине от дома до магазина. На БМВ или Фольксвагене".

    Прием и запись в БД параметров get или посте запросов - это то чем занимаются 99% веб приложений. Ничего принциаиально особенного в "приеме get запросов" и "записи в БД" нет. То есть вопрос заведомо бессмысленный. Записывай как угодно, на любом языке, который тебе ближе
    Ответ написан
    Комментировать
  • Как уменьшить операции с диском у БД и какую БД взять под php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если запросы идут пачками в рамках одного и того же скрипта, то идеальным решением будет использование транзакций.
    Если заворачивать пачку DML запросов в транзакцию, то производительность иннодб становится вровень с майисам. А в данном случае нам важно что достигается эффект отложенной записи, поскольку результат записи нас интересует для всей транзакции, а не для отдельного запроса, а БД достаточно умна чтобы флушить данные на диск пачками. И в итоге все летает и диски не напрягаются даже при дефолтной настройке innodb_flush_log_at_trx_commit
    Ответ написан
    2 комментария
  • Как такое реализовать Сделайте разбиение на страницы ( на PHP) с переходом по номерам страниц?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тебе ещё рано браться за такие сложные задачи.
    Повторяй пока выполнение запроса SELECT из РНР.
    А оператор LIMIT проходят в следующем классе.
    Ответ написан
    Комментировать
  • Какие есть методы навигации по сайту, с одним index.php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    пишешь в адресной строке своего браузера, PHP ЧПУ
    Ответ написан
    Комментировать
  • Почему я не могу использовать try и catch в разных частях кода?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если не обращать внимание на дурацкий пример (PDO прекрксно без твоей помощи справится с выбросом исключения, и echo $ex->getMessage();die(); - это полная бессмыслица, поскольку пхп опять же выведет сообщение об ошибке без твоей помощи) то ты просто не туда поставил закрывающую скобку. она должна быть перед catch
    try {
            $db=new PDO($DSN, $db_user, $db_pass, $pdo_opt);
    
    ?>
    бла блa бла
    <?
    
    } catch(Exception $ex) {
        обработка исключения
    }

    В общем, оставь пока исключения в покое, тебе не надо их ни бросать, ни ловить.
    Ответ написан
    2 комментария
  • Как узнать есть ли изменения?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    А простая идея сравнить исходную строку с полученной не приходила в голову?
    Ответ написан
    Комментировать
  • Зачем использовать готовые решения?

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

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

    Впрочем, это естественный процесс, который проходит каждый велосипедописатель, и по достижении этого порога радостно выкидывает велосипеды, заменяя на модули, поддержкой которых занимается сообщество.
    Ответ написан
    1 комментарий
  • При использовании LIKE в SQL-запросе не получается найти данные с кириллицей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    нужно ее декодировать с помощью функции urldecode().

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

    И надо не раскодировать данные, а убирать лишнее кодирование.
    Ответ написан
    Комментировать
  • В чем отличие QUERY_STRING и REQUEST_URI?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну, как бы, в наличии "слеша" и заключается вся разница.
    Как говорится в одном древнем тексте,
    Это не просто палочка, а самостоятельный АДРЕС, путь.
    В адресе www.site.ru/ последняя косая черта - не для красоты! Она обозначает вполне конкретный адрес - начало сайта.


    Если ты вдруг выведешь REQUEST_URI не при обращении к корню сайта, то сразу увидишь разницу
    Ответ написан
    Комментировать
  • Как проверить наличие переменной в POST?

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

    А проверять наличие переменной не нужно. Переменная в посте всегда есть. Если надо проверить на пустоту, то это делается совсем другими функциями.
    Ответ написан