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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Контроль доступа - по возможности выноси в контроллер, с помощью Voters например.
    Валидацию данных - рекомендую выполнять в каждом публичном и защищенном методе. Да, это вроде как гемор, но такой подход экономит время коллосально на отладке. Непосредственно в Entity валидация в сеттерах.
    https://github.com/index0h/php-conventions
    Ответ написан
    Комментировать
  • Поможет ли суррогатный ключ увеличить скорость вставки в таблицу?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Запросы делались по одному, без оборачивания в транзакцию (насколько я понимаю, если запрос один - то и транзакция бесполезна, независимо от кол-ва строк?).

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

    Кроме этого, batch-запросы с auto increment имеют намного меньшее max время вставки: 1,5 сек против 11,4 (да, 11 секунд на вставку 20 строк).

    Верно, это вполне ожидаемый результат.

    правильно ли я решаю эту проблему и действительно ли суррогатный ключ в таких ситуациях даёт прирост скорости?

    Не совсем. Индекс не ускоряет вставку, что обычный, что комплексный, он ускоряет поиск. Чем меньше индекс - тем быстрее он рассчитается.
    Очень похоже на то, что у вас проблема несколько иного характера. Индекс хранится в ОЗУ, тормоза на вставке вероятно у вас за счет того, что индекс не влазит в буфер движка. Это значит, что при вставке БД занимается вытеснением из буфера одних индексов другими, а это уже работа с файловой системой, что очень медленно.
    В таких ситуациях стоит двигаться в сторону уменьшения размера самого индекса.
    Ответ написан
    4 комментария
  • Как побороть ошибку #1032 - Невозможно найти запись?

    @karminski
    Senior React.JS Developer
    Ну вы заблокировали запись в таблицу!
    LOCK TABLES `mdf_prefix_info` WRITE;

    Естественно INSERT не работает!
    Ответ написан
    2 комментария
  • Как перевести фото в массив?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Есть ровно две практики работы с фотками. Либо вы пихаете их в блоб в БД, но вы должны быть абсолютно уверены в том, что вы делаете и понимать плюсы и минусы, например

    +у вас всегда все консистентно
    -база очень быстро раздувается, но можно выкинуть блобы с фотками в отдельную таблицу

    Либо вы грузите файлы на файловое хранилище, будь то S3 или просто ФС, а в бд храните индекс.
    Ответ написан
    Комментировать
  • Как перенсти активацию PhpStormс одной системы на другую?

    Сам ключ "где-то есть", но не факт)

    он есть в лк на джетбрейнсе
    Ответ написан
    Комментировать
  • Как junior'у перестать нервничать?

    @mkone112
    Начинающий питонист.
    Господи, какие доктора нафиг. У чувака первая работа, вылететь не хочется, много вы видели джунов которые не стрессовали? Т.С. - гуляй больше, через годик станет легче(но это не точно). Так вообще 90% любой работы связано со стрессом. Или ты когда в вузе учился был спокоен как удав?
    Ответ написан
    1 комментарий
  • Как нажать на кнопку "Подписаться" и "Лайк" на youtube.com?

    @Araya
    Нажать на одну, потом на другую. Выглядит как решение :)
    Ответ написан
    5 комментариев
  • Как проверить данные для авторизации через MySQL?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    mysqli_query возвращает false если во время выполнения запроса произошла ошибка. Поэтому, если вы уж пишете в таком стиле, то извольте проверять, что во время выполнения запроса ошибки не произошло. Примерно так:
    $checkUser = mysqli_query($connect, "SELECT * FROM `users` WHERE `email` == '$email' AND `password` == '$password'");
    if ($checkUser  === false) {
        die(mysqli_error($connect));
    }


    После того как вы добавите в код проверку, вы увидите что система ругается на некорректный синтаксис SQL-запроса. Конкретно в вашем случае это использование "==" для сравнения. В MySQL используется одинарное "=" для сравнения.
    После того как вы исправите эту ошибку, код ваш заработает, но он будет очень небезопасным.
    Для того чтобы подставлять значения из php-перемнных в SQL-запрос, используйте подготовленные выражения.

    Более подробно расписано почему не стоит использовать mysqli_num_rows и как пользоваться подготовленными выражениями (информация была скопирована отсюда):

    Это очень хороший вопрос.
    Ответ на него - никак не использовать.

    Да, в mysqli действительно есть специальная функция, которая может сказать, какое количество строк вернул запрос SELECT.
    Традиционно употребляется в двух случаях:

    а) когда это не нужно
    б) когда приводит к катастрофическим последствиям

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

    Второй вариант - если эта функция используется чтобы посчитать, сколько строк лежит в БД. В таком варианте это будет откровенное вредительство, поскольку данных может быть очень много, и все эти данные БД должна сначала получить у себя, а потом отправить в РНР. Заняв всю доступную память или даже вызвав фатальную ошибку нехватки памяти.

    Правильным решением этой задачи будет сделать запрос вида SELECT COUNT(*) FROM .... В этом случае БД сама внутри себя посчитает количество строк (очень быстро) и вернёт только одно число, которое не занимает оперативную память вообще.

    Вот и получается, что функция mysqli_num_rows() является либо вредной, либо бесполезной

    В данном случае надо сначала получить записи из БД
    // БЕЗОПАСНО выполняем запрос
    $stmt = $link->prepare("SELECT * FROM comments WHERE art_id = ?");
    $stmt->bind_param("s", $note_id);
    $stmt->execute();
    // получаем данные
    $result = $stmt->get_result();
    $comments = $result->fetch_all(MYSQLI_ASSOC);


    А после этого уже их выводить
    <?php if ($comments): ?>
        <?php foreach ($comments as $row): ?>
             <?=$row['comment']?><br>
        <?php endforeach ?>
    <?php else: ?>
        Эту запись еще никто не комментировал
    <?php endif ?>


    Как видно, никакой mysqli_num_rows нам не понадобилось
    Ответ написан
    7 комментариев
  • Как склеить два коммита, расположенных не подряд?

    Это может быть не просто. Оцените необходимость этой операции прежде чем действовать, можно сильно навредить репозиторию / коду.

    Задачу можно выполнить через интерактивный rebase. В процессе с высокой вероятностью возникнут конфликты. Я бы делал в 2 этапа. Первым делом расположил бы коммиты в нужном порядке

    git rebase -i хеш_коммита_3^
    В открывшемся редакторе можно выставить коммиты в нужном порядке.
    После сохранения файла, вероятнее всего появится сообщение о неразрешенных конфликтах - их все необходмио разрешить, добавить в индекс и продолжить rebase через git rebase --continue

    После успеха, можно повторить интерактивный rebase с целью сделать squash.
    Ответ написан
    Комментировать
  • Как скачивать тяжелые сайты с сервера debian?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Соответственно командой tar его не запакуешь и не скачаешь по sftp

    В адекватном сайте, медиа контент должен жить в отдельных каталогах, следовательно аудио и видео качаются отдельно, база отдельно, а код сайта пакуется таром и качается тоже отдельно.
    Или все вместе по sftp (почему нельзя, неясно, все можно)
    или rsync
    Ответ написан
    Комментировать
  • Почему показатель Core не растёт при нагрузке?

    @BLM21 Автор вопроса
    Всё чушь. Выявил парадокс лютый. Дело не в кабелях. Дело в следующем.

    Чтоб видеокарта работала корректно, приходить делать так:
    1) включил комп
    2) запустил видео крайне высокого качества
    3) запустил GPU-Z
    4) жду, пока показатель GPU temperature достигнет хотя бы 46° по Цельсию
    5) выключаю ПК до полного выключения и остановки вентиляторов
    6) отсчитываю не менее 11 секунд
    7) на 12 секунде включаю ПК

    Только при таком раскладе карта нормально работает и бустится. Если что-то из семи пунктов нарушено при выполнении, карта корректно не будет работать, придётся повторять эту же операцию КОРРЕКТНО.

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

    Трабл в видеокарте, продали новую в KNS , оказалась б/у, и даже болтов не хватает. Цепь питания нарушена, видимо. Но хорошего пайщика нет, а другие разведут по полной. Потому так и живу. На включение компа уходит пять минут, чтобы завелась карта нормально. Благо, я включаю комп раз в день - утром.
    Ответ написан
    3 комментария
  • Как узнать были ли на сервере dev версии проекта?

    Можно посмотреть лог менеджера пакетов какие пакеты ставились/удалялись. Для debian это /var/log/dpkg.log
    Ответ написан
    Комментировать
  • Чем константа отличается от переменной?

    warlinx
    @warlinx
    выпускник гикбрейц - это константа, а начинающий разработчик - переменная
    Ответ написан
    1 комментарий
  • В чем преимущество "фабричного метода" перед простым созданием объектов?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    Просто пример дурацкий. Представьте что вам нужно в зависимости от времени суток создавать разных животных. Ночью львов, днём котят. Причём не в одном месте приложения. Тогда метод initial будет включать в себя проверку на время суток и в зависимости от этого отдавать нужное животное. Причём так будет автоматически происходить везде где вызывается Animal::initial().
    Ответ написан
    6 комментариев
  • Новая система аутентификации теперь не делает редирект?

    @alexrakirov Автор вопроса
    В общем читаю книгу вижу фигу, плохо посмотрел что там в FirewallConfig

    В firewall добавляем entryPointкласс от AuthenticationEntryPointInterface

    $security->firewall('main')
            ->lazy(true)
            ->customAuthenticators([LoginAuthenticator::class])
            ->entryPoint(AuthenticationEntryPoint::class)
            ->logout()
                ->path('logout')
                ->target('login');
    Ответ написан
    Комментировать
  • Docker: nginx + php-fpm, ошибка 502 при смене порта у php-fpm. Как исправить?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Вы маппите другой порт наружу - а внутри-то он остаётся 9000.
    Ответ написан
  • Как логичнее использовать метод insert данных в таблицу к примеру Users используя Repository в связке с Entity?

    uDenX
    @uDenX
    PHP Developer
    1. Бизнес логика содержится в сервисах и вызывается контроллером. В самом контроллере почти не должно быть логики

    2. У доктрины есть соответствующий метод flush. Для новых сущностей перед вызовом flush нужно вызвать persist

    https://www.doctrine-project.org/projects/doctrine...
    Ответ написан
    Комментировать
  • Почему не запускается приложение?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    И при чем тут база? В ошибке написано что $this вне объекта используется, даже написано в каком файле и в какой строке.
    foreach($this->data['news']->getNews() as $article)

    $this это кто у вас в данном файле?
    Ответ написан
    Комментировать
  • Где взять голый linux?

    vvpoloskin
    @vvpoloskin
    Инженер связи
    Ставь gentoo. Во время чтения мануалов и установки поймёшь как оно работает. И все равно тебе будет нужен пакетный менеджер, если конечно ты не извращенец собирать все сам в ручную и отслеживать зависимости. Поэтому совсем без отпечатка дистрибутива не получится.
    Ответ написан
    1 комментарий
  • Где взять голый linux?

    Sanes
    @Sanes
    Поставь Ubuntu. Не мучайся.
    Ответ написан
    2 комментария