• SQL инъекция в UPDATE возможна ли?

    @Vitsliputsli
    xukapy, улучшение производительности путем prepared statements действительно очень сомнительно. Построение плана достаточно быстрое действие по сравнению с остальными, выигрыш на этом ничтожен. А если мы говорим про MySQL, то там кеширование плана происходит только в рамках текущей сессии, т.е. если речь не про демоны поддерживающие постоянное подключение, то смысла нет совсем, ProxySQL, насколько знаю, тоже не сильно хорошо работает с ними. До последних версий 8ки MySQL (многие до сих пор используют 5.7, считая 8ку "сырой") не имел нормальной поддержки prepared statements, только эмуляцию, вероятно именно это причина возможности sql-инъекций при использовании prepared statements для китайских кодировок. Кроме этого, каждый такой запрос требует 3 сетевых запроса, что негативно влияет на производительность.
    Т.е. используя prepared statements вы получаете наилучшую сейчас защиту от инъекций, если не используете китайские кодировки в MySQL, с незаметной для обычных проектов потерей производительности (а в последних версиях и вовсе незначительной).
  • В mysql для быстрого поиска по дате лучше использовать timestamp как int или как date (datetime)?

    @Vitsliputsli
    FanatPHP, это все верно, когда мы говорим о небольших данных. Если у нас достаточно большая таблица с соответствующими индексами, то памяти под все индексы никак не хватит. В принципе, этого и не нужно, т.к. в памяти хранятся только те страницы индекса к которым идет активное обращение. Т.е. возвращаясь к вопросу в обычной ситуации разницы нет никакой. Но, если взять описанную ситуацию, и мы формируем запрос требующий полный скан индекса, то за ранее неиспользуемыми страницами понадобится лезть на диск.
    Представить себе запрос вида select * from order by на многомилионной таблице трудно, но даже если подобное потребуется такое стоит решать иными механизмами.
  • Ошбика базы данных mariadb.service No space left on device?

    @Vitsliputsli
    Денис Юрьев, например, в Арче. А в большинстве или нет - вопрос спорный.
  • Как слить 2 локальные ветки?

    @Vitsliputsli
    CenterJoin, не пишите что считаете нужно сделать, пишите что хотите получить. Что значит "запулиться еще из нескольких веток"?
    В master нужно класть готовый результат, а не промежуточные состояния. Если у вас все закоммичено, то нет проблем переключиться на другую ветку и затянуть ее актуальное состояние.
  • Почему при выборке из БД учитываются даты с другим месяцем?

    @Vitsliputsli
    WeStlik,
    неудобно мне так

    почему? судя по тому что задаете здесь вопрос, вам неудобно так, как вы делаете.

    Храните даты в формате даты, это избавит вас от множества подобных проблем. Либо приводите строки к датам и потом сравниваете, например с помощью str_to_date.
  • Каким образом поступить?

    @Vitsliputsli
    Северное Сияние,
    из этого трясущугося всего боящегося красноглазика муж как из г. лопата.

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

    @Vitsliputsli
    Владимир Коротенко, да, пока вся работа представляет собой забрать данные из таблички для одного пользователя. Не проще ли тогда базу положить рядом с клиентским приложением?..
    Если "безопасность тут 10 дело", то тогда вариант с API не ужасен, раз мы исходим из архитектурного подхода "и так сойдет..."
  • Как проверить значение строки?

    @Vitsliputsli
    Талян, ENUM отличное решение, а BOOL зачем?
  • Как проверить значение строки?

    @Vitsliputsli
    ENUM отличное решение, а BOOLEAN зачем?
  • Как взаимодействовать с базой данных расположенной на сервере из десктопного приложения?

    @Vitsliputsli
    Владимир Коротенко, как не факт, когда автор указал, что СУБД на сервере. Создание запроса вещь быстрая и она будет в любом случае, формируешь запрос к СУБД или запрос к API. Создание соединения с СУБД тоже далеко не 160мс, но здесь да, будут некоторые потери, если ничего особого не делать.
    Лучше заранее разделить такие вещи, чтобы можно было независимо управлять и разрабатывать серверную и клиентскую часть. Не факт, что в будущем клиенту нужно будет отдавать сырые данные из БД, и потребуется обработка на сервере. Плюс возможность масштабирования. Не говоря уже о том, что ходить напрямую в БД - это проблема в безопасности и ее придется решать ограничением доступа на стороне БД.
  • Как ускорить работу скрипта?

    @Vitsliputsli
    Я более чем уверен что этот скрипт максимально медленный

    Что значит уверен? Проверьте и определите наиболее медленные части.

    Как минимум, запросы file_get_contents можно делать асинхронно, если это допустимо.
    Инсерты в базу, если их много делать по одному очень долго, отправляйте пачкой, по 10-50 штук в одном запросе.
  • Как взаимодействовать с базой данных расположенной на сервере из десктопного приложения?

    @Vitsliputsli
    Владимир Коротенко, так ведь СУБД тоже удаленная, лаг на запрос по сети будет одинаковый, к СУБД мы обращаемся или сервису там же.
  • Как обновлять данные через webSocket?

    @Vitsliputsli
    tommy-vercetti, для WebSocket много решений, одно из неплохих Ratchet, асинхронность через ReactPHP. Он не плох, но я не говорю что PHP лучшее решение. В PHP IO блокирующий, хотя по-факту это не имеет большого значения при нормальной работе, когда есть ws- сервер и есть воркеры обслуживающие задачи, а при таком подходе отдельный сервис можно на чем угодно написать, и по-моему Go отличный вариант (ведь все что нужно это держать ws-сервер и обмениваться сообщениями с брокером, и чуть логики на аутентификацию, в Go это не сложно сделать). Можно еще заморочиться с потоками, но это будет сложнее и проблематичнее. У PHP есть ограничение на кол-во подключений в сокетах, но когда у тебя больше 1000 подключений, уже стоит думать о масштабировании.
    Т.е. неидеально, но вполне нормально.
  • Не корректная работа функции сравнения строк?

    @Vitsliputsli
    Artem Kirsov, empty реализует простой код: !isset($var) || $var == false. Т.е. во второй части используется динамическое преобразование типов, либо нужно хорошо знать все нюансы динамического преобразования в PHP, либо пользоваться более очевидными конструкциями.
    Используйте явное объявление типов, приводите типы к нужным вам вручную, иначе вам придется просчитывать все возможные варианты для всех типов, а если сюда добавляется еще и динамическое преобразование, то шансы совершить ошибку очень большие.
    К примеру, если сделать так:
    function checkFailureMasterSumm(int $masterSumm, int $controlSumm): bool
    {
        return ($masterSumm !== $controlSumm);
    }

    то очевидно, что приходит на вход функции, и что будет на выходе. "master_failure_summ" пусть напишет то, что занимается выводом, а эта функция просто сравнивает суммы master и control. Если под Summ понимается не вычисляемое значение или требуется значения больше чем int - то принимайте на вход строки.
  • В mysql для быстрого поиска по дате лучше использовать timestamp как int или как date (datetime)?

    @Vitsliputsli
    FanatPHP, индекс может быть огромным, собственно этот случай и интересен, когда оптимизируем выборки по большой таблице. Держать его весь в памяти постоянно тяжко, разве нет? Но надо это поизучать.
  • В mysql для быстрого поиска по дате лучше использовать timestamp как int или как date (datetime)?

    @Vitsliputsli
    Как обычно на тостере, "чушь" и аргументы не обязательны.
    Поправьте меня, если я не прав, но поиск по индексу будет выглядеть примерно так: идем по бинарному дереву, читаем с диска в память, читаем процессором из памяти, выполняем сравнение. Чтение с диска выполняется не по байтам, поэтому прочитать 5 байт или 512 разницы нет. Чтение процессором будет работать примерно также, страница памяти и смещение, тут больше вопрос к выравниванию, но о нем речи не идет, поэтому разницы так же нет, если конечно сравниваемое не превышает размеров регистра. Ну и процессору без разницы сравнивать 4 байта или 5. Т.е. фактически разницы не будет.
    Но это поиск, при сортировке казалось бы должно быть иначе, т.к. в совокупности индекс с datetime будет занимать больше места на диске. Но даже в этом случае, разница несущественна, т.к. индекс datetime будет больше индекса по timestamp примерно на 5%, что в работе не даст существенного выигрыша.
  • Как обновлять данные через webSocket?

    @Vitsliputsli
    Slava Rozhnev,
    NodeJS создает процесс который поддерживает постояннное соединение по WebSocket в отличие от РНР который расчитан на то чтобы получить запрос ветнуть ответ и умереть.
    Конечно в РНР уже напридумывали всяких костылей для сокетов, но это не является нативным поведением в отличии от ноды

    Вот так задаешь вопрос, думаешь что-то интересное узнать, ну или как минимум услышать что-то старое... получаешь какую-то дичь. Уж простите, но вы чушь пишите.
    Демоны на php прекрасно работают и широко применяются, в том числе в highload - это факт. Работа с WebSocket в принципе подразумевает постоянное поддержание соединения, это не http, поэтому не понятно о чем вы пишите. В PHP есть решения для WebSocket, которые нормально работают. Что такое "нативное поведение для сокетов" вообще неизвестно и тем более что за костыли в PHP для этого, можете рассказать что конкретно имеете ввиду?
  • Как сделать статическим готовый php скрипт?

    @Vitsliputsli
    Владимир Брумер, под словом крон (cron) всегда понимают unix-демон, выполняющий задания по времени, а не идиотизм wp-cron. Идиотизм потому, что нельзя использовать устоявшееся слово cron (время) для системы, которая работает не по времени, а по событиям. Не представляю зачем wp так сделал.