• Какое ваше отношение к таблицам с внешним ключам с NULL значением?

    Fernus
    @Fernus
    Техник - Механик :)
    Вот, по-моему мнению, что должно быть главным критерием при проектировании структуры в данном случае:

    Использование NULL для обозначения отсутствия значения может немного сохранить место, особенно для числовых типов полей, но и увеличить время выборки, если поле необходимо индексировать.


    P.S.: Вам больше место жалко или производительность? :)

    P.S.S.: Чем не устраивает 0 вместо NULL для чисел?

    P.S.S.S.: В запросах один фиг будет фигурировать либо "IS NULL/NOT NULL", либо "<> 0"...заморочки одни и те же по сути...а вот разница в этом всём как - "лысый" и "бритый" :)

    P.S.S.S.S.: Есть негласное правило...

    NULL нафиг не нужен, если все его свойства не используются...


    А вот какие оно имеет свойства:

    Если вы сравниваете значение NULL с другим значением NULL или любым другим значением, результатом является то, что значение NULL каждого значения NULL неизвестно. Обычно значение NULL используется для указания того, что данные отсутствуют, неизвестны или неприменимы.


    Но в данном случае у Вас по значению 0 и так будет понятно всё.

    Вопрос: нафиг этот NULL ? Все его "плюсы" в данном случае не работают...

    Ну и вот уже было тут:
    https://qna.habr.com/q/463917

    Выбор зависит от задач(и)...
    Ответ написан
  • Как лучше обращаться к базе?

    Fernus
    @Fernus
    Техник - Механик :)
    Вы можете использовать это как грубый «набор правил»:

    YES , использовать постоянные соединения, если:

    • Есть только несколько приложений/пользователей, обращающихся к базе данных, т.е. вы не получите 200 открытых (но, вероятно, бездействующих) подключений, потому что на одном хосте есть 200 разных пользователей.
    • База данных работает на другом сервере, к которому вы обращаетесь по сети.
    • (Одно) приложение очень часто обращается к базе данных


    NO , не используйте постоянные соединения, если:

    • Вашему приложению нужно обращаться к базе данных всего 100 раз в час.
    • У вас есть много веб-серверов, обращающихся к одному серверу базы данных.
    • Вы используете Apache в режиме prefork. Он использует одно соединение для каждого дочернего процесса, что может довольно быстро увеличиваться.


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

    Проблема в том, что в «конфигурации по умолчанию» MySQL разрешает только 1000 параллельных «открытых каналов». После этого новые подключения будут отклонены (эту настройку можно изменить). Итак, если у вас есть, скажем, 20 веб-серверов со 100 клиентами на каждом из них, и каждый из них имеет доступ только к одной странице в час, простая математика покажет вам, что вам потребуется 2000 параллельных подключений к базе данных. Это не сработает.

    Следовательно: используйте его только для приложений с большим количеством запросов.


    Original:
    https://stackoverflow.com/questions/50303/persiste...
    Ответ написан
    Комментировать
  • Как удалить определенные словосочетание у названий товаров woocommerce в mysql?

    Fernus
    @Fernus
    Техник - Механик :)
    UPDATE
        `table`
    SET
        `field` = REPLACE(`field`, 'чё_меняем', 'на_чё_меняем')
    WHERE
        `field` LIKE '%чё_меняем%';


    P.S.: Бекап БД советую сделать перед этим...
    Ответ написан
    Комментировать
  • Как передать данные без кавычек в execute() безопасно, чтобы предотвратить SQL-инъекции (PyMySql)?

    Fernus
    @Fernus
    Техник - Механик :)
    https://stackoverflow.com/questions/54113887/place...

    P.S.: Я бы проверял через "белый список" допустимые таблицы...независимо от экранирования в запросе...
    Ответ написан
    7 комментариев
  • Стоит ли из данных полученных с двух ajax запросов создавать 1000 новых?

    Fernus
    @Fernus
    Техник - Механик :)
    Исходя чисто из вопроса...

    Как лучше это сделать?


    Там же и ответ:

    Переложить всю работу на бек часть, чтобы был 1 https запрос на получение данных
    Ответ написан
    Комментировать
  • Как найти искомый номер телефона?

    Fernus
    @Fernus
    Техник - Механик :)
    Есть в базе телефонные номера вида +375 (17) 111-11-11

    База на чём сделана? MySQL ? Какая версия?
    Если 8 версия, то примерно так можно...

    SELECT * 
    FROM test 
    WHERE REGEXP_REPLACE(phone, '[^0-9]', '') LIKE '%1711111%';
    Ответ написан
    3 комментария
  • При использовании scopeBindings я обязательно должен передать в аргументы контроллера необходимые модели?

    Fernus
    @Fernus
    Техник - Механик :)
    Всё правильно.

    UPD:

    Документация:
    https://laravel.com/docs/9.x/routing#implicit-mode...

    UPD2:

    Если мы делаем scopeBindings, обязательно нужно прописывать все модели - родителя и дочернюю?

    Да
    Ответ написан
    3 комментария
  • Как сгенерировать случайное число?

    Fernus
    @Fernus
    Техник - Механик :)
    let MIN = 0;
    let MAX = 0.005;
    let L = 8; // Знаки после запятой
    let RANDOM = (Math.random() * (MIN - MAX) + MAX).toFixed(L);
    
    console.log(RANDOM);
    Ответ написан
    Комментировать
  • Как найти совпадения в бд?

    Fernus
    @Fernus
    Техник - Механик :)
    <?php
    
    $isStop = SpamWord::whereRaw("? RLIKE CONCAT('[[:<:]]', `word`, '[[:>:]]')", [$text])->exists();
    
    if($isStop) {
    
        // Есть плохое слово
    
    }


    P.S.: Ниже правильно советуют...собрать все слова в "шаблоны" и не дёргать БД каждый раз...
    А касаемо вопроса - должно работать и так :)
    Ответ написан
    Комментировать
  • Как усложнить жизнь провайдеру не теряя комфорта?

    Fernus
    @Fernus
    Техник - Механик :)
    Однако при этом, пользователь А не параноик, и не горит желанием использовать впн 24/7 ибо это долго, неудобно, дорого и не всегда надёжно.


    Смотри тогда фильмы в "форточку" на кухне)))

    А по сути, даже с VPN (только с ним) - уже НЕ ФАКТ, что про тебя "не знают" ( тобишь знают:) )...)))
    Поэтому, учитывая это:
    Однако при этом, пользователь А не параноик


    Забей и смотри порно спокойно))

    Я вот не пользуюсь VPN особо - только, если нужен доступ к закрытым сайтам или серверам...

    Просто есть туча факторов, с помощью которых тебя при самой, даже, малой нужде найдут))
    Например:
    Ты сидишь дома с компа с VPN + TOR + VPN (представим)...и тут же с этой же точки с мобилы соединяешься с wi-fi по обычному каналу...НО...если захотеть, то тебя найдут тупо по точке доступа к которой присоединилась мобила и по той точке, с которой соединился комп с VPN (первый выход)....т.е. берут двух операторов и смотрят трафик, отталкиваясь по соединению с wi-fi...
    Ну это конечно теория - но я бы так действовал, если бы был "ТАМ НАВЕРХУ" ))
    Сопоставить мобильный трафик с точками wi-fi по операторам, которые подвласны "твоей стране"...

    Дали бы только этот пульт... - я бы уже многих нашёл))

    SIM передаёт IMEI оператору...дальше, если ты хоть раз соединишься через ту точку доступа, с которой идёт связка с другого "типа защищённого" устройства (VPN + TOR + VPN (представим) ), то можно предположить, что ты "одно лицо"!
    Далее уже пофиг на твою связку и можно следить за тобой через телефон...а смартфоны - это дыра в реальном мире))

    Это тебе задуматься насчёт "паранои" - в принципе ))

    Есть и более изощрённые способы...но раз задача, повторюсь:
    Однако при этом, пользователь А не параноик

    То просто забей)

    Иначе - придётся:
    использовать впн 24/7 ибо это долго, неудобно, дорого и не всегда надёжно

    + ещё соц. инженерия и поведение в инете))
    + TOR и несколько VPN по миру, при этом ГАРАНТИРОВАННО "своих" серваков, к которым не будет доступа у "твоих властей" - тут неудобства с трафиком будут, как минимум...к тому же самому нужно будет заниматься настройкой и ни в коем случае не брать "готовые VPN"...
    + Ещё много нюансов, но чтобы так замарачиваться - думаю тебе уже хватит, чтобы спокойно жить с тем, что твои отпечатки в инете повсюду)))

    UPD:

    Это я описал ещё не самый извращённый вариант... - как мне видится))
    Но "у них" есть и более "жёсткие" методы))
    Поэтому меняй дислокацию, все устройства, с которых ты хоть раз выходил в сеть (через сим или инет - пофиг)...
    + Купи Nokia такую:
    nokia3310-488x488.jpg
    При этом нужно будет соблюдать жёстко "соц. инженерию"))
    И уже далее, как минимум, задумайся о своём вопросе в начале...
    Т.е. в нашем мире много "связей" через которые тебя "уже знают"...

    Поэтому, как я выше и написал - забей, если не параноик))

    UPD 2.0:

    пользователь А не параноик, и не горит желанием использовать впн 24/7 ибо это долго, неудобно, дорого и не всегда надёжно


    Разберём по полкам:

    впн 24/7 ибо это долго

    Тогда просто возьми VPN в своей же стране, но у другого оператора и в другом конце своей же страны - тут задержки минимальны будут в трафике...

    неудобно

    В чём "неудобно" ? Если нужны сайты своей же страны, то вполне норм, НО:
    + TOR (с настройкой трафика через выход своей же страны - это типа для "удобства") - детская защита получится - но для чтения "запретки" вполне пойдёт))

    дорого

    VDS можно и за 1$ в мес. найти...- самому настроить - профит)

    и не всегда надёжно

    Тут смотри всё, что - выше...и решай сам...

    100% вариант в теории есть - но не факт - зависит от многих факторов))

    UPD 3.0:

    Только заметил:
    (Само собой без сторонних vpn и proxy, иначе было бы слишком просто)

    Тогда даже не пытайся))
    Всё - прощаемся изначально)))

    Мой ответ:
    НИКАК

    P.S.:
    без сторонних vpn и proxy, иначе было бы слишком просто

    Тут тоже "не всё так просто" - смотри выше :)))
    Ответ написан
    2 комментария
  • Как сделать так чтобы выводились всегда последние 4 цифры?

    Fernus
    @Fernus
    Техник - Механик :)
    let k = 6;
    for(let i = 1; i <= k; i++) {
    
       if(k - i <= 4) {
    
            console.log(i);
    
        }
    
    }


    UPD:

    let k = 6;
    let b = k - 4 + 1;
    for(let i = b; i <= k; i++) {
    
            console.log(i);
    
    }
    Ответ написан
    2 комментария
  • Как лучше организовать работу с 3 таблицами?

    Fernus
    @Fernus
    Техник - Механик :)
    Основные таблицы:
    - users;
    - documents;
    - addresses.

    Связные таблицы:
    - user_address (user_id, address_id);
    - user_document (user_id, document_id);
    - document_address (document_id, address_id).

    Запросы строить с помощью JOIN...самый классический вариант...

    UPD:
    ...
    Ответ написан
    Комментировать
  • Получить полный URL до папки?

    Fernus
    @Fernus
    Техник - Механик :)
    <?php
    
    $url = 'https://site.ru/folder/dex/index.php';
    
    $url_dirname = dirname($url);
    
    print_r($url_dirname); // https://site.ru/folder/dex
    Ответ написан
    4 комментария
  • Как шифруется изображение на сайте?

    Fernus
    @Fernus
    Техник - Механик :)
    Оно никак не шифруется :)

    скачай и сохрани в файл...

    Например:
    wget -O file.jpg https://www.asavacu.com/image/images_1/images/I/71...
    или
    curl -o file.jpg https://www.asavacu.com/image/images_1/images/I/71...
    Ответ написан
  • Как получить все значения из вложенных массивов по ключу?

    Fernus
    @Fernus
    Техник - Механик :)
    <?php
    
    $datapost = array(
      array(
        'header' => 'город Москва',	
        'category_id' => '1',
      ),
      array(
        'header' => 'село Огонёво',	
        'category_id' => '2',
      ),
      array(
        'header' => 'село Быстрино',	
        'category_id' => '2',
      ),
      array(
        'header' => 'посёлок Восточный',	
        'category_id' => '7',
      ),
    );
    
    $query = mysqli_query($connect, "SELECT `id` FROM `category` ");
    $rows = mysqli_fetch_all($query, MYSQLI_ASSOC);
    
    $arIDs = [];
    
    foreach($rows as $row) {
        $arIDs[$row['id']] = $row['id'];
    }
    
    $arResults = [];
    
    foreach($datapost as $data) {
    
        if(array_key_exists($data['category_id'], $arIDs))
            $arResults[$data['category_id']][] = $data;
    
    }
    
    print_r($arResults);
    Ответ написан
  • Как сделать IN если возможные значения записаны строкой?

    Fernus
    @Fernus
    Техник - Механик :)
    Решение задачи...но это ппц...
    Тупо вариант, чтобы "размять" мозги :)

    SELECT
      *
    FROM
      table_b
    WHERE
      id IN(SELECT
            DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(`keys`, ',', n.digit+1), ',', -1) val
          FROM
            table_a
            INNER JOIN
            (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3  UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n
            ON LENGTH(REPLACE(`keys`, ',' , '')) <= LENGTH(`keys`)-n.digit
          WHERE `id` = 1
           );


    Пример с данными
    Ответ написан
    Комментировать
  • Как в LIKE настроить границу поиска по шаблону?

    Fernus
    @Fernus
    Техник - Механик :)
    SELECT *
    FROM `table`
    WHERE `field` REGEXP '[[:<:]]3[[:>:]]'


    Попробуй так...
    Ответ написан
    Комментировать
  • Как составить запрос с выборкой по минимальной дате и ещё одному условию?

    Fernus
    @Fernus
    Техник - Механик :)
    SELECT `name` 
    FROM `example`
    WHERE `status` = 'free'
    ORDER BY `date`ASC
    LIMIT 1;

    Не?
    Ответ написан
    1 комментарий
  • Preimage - атака нахождения прообраза. Теория + практика. Пофантазируем?

    Fernus
    @Fernus Автор вопроса
    Техник - Механик :)
    Как бы банально не звучало: wikipedia всё чётко объясняет :)

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

    Атака нахождения первого прообраза: по данному значению хеша h найти такое сообщение m, что hash(m) = h.[1]
    Атака нахождения второго прообраза: по данному сообщению m1 найти отличное от него сообщение m2 такое, что hash(m2) = hash(m1).[1]
    Для идеальной n-битовой хеш-функции сложность нахождения первого прообраза составляет 2n, что считается высоким показателем, учитывая среднюю длину хеш-значений (порядка 160 бит). Если злоумышленник не может провести атаку с меньшими затратами, то такая хеш-функция считается устойчивой к атаке нахождения прообраза.

    Разработанные на сегодняшний момент атаки на прообраз не являются практически пригодными. Если такую атаку возможно будет применить на практике, то это сильно повлияет на многие протоколы сети Интернет. В данном ключе, слово «практический» означает, что атака может быть проведена за разумное время при разумных затратах. Атака по нахождению прообраза, которая стоит миллиарды и занимает десятилетия вычислений, совсем не практична; в то же время атака, на которую уйдёт всего несколько тысяч долларов и несколько недель вычислений, применима на практике.

    Все известные на сегодняшний момент применимые или почти применимые на практике атаки[2][3][4] на MD5 и SHA-1 — это коллизионные атаки, которые легче для проведения[5]. Устойчивость к нахождению прообраза можно свести к устойчивости к коллизиям.



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

    Fernus
    @Fernus
    Техник - Механик :)
    SELECT `brand`, `age`, COUNT(*) AS `ALL` 
    FROM `products`
    GROUP BY `brand`, `age`
    /* ORDER BY `ALL` DESC // сортировка по-убыванию кол-ва - раскомментируйте, если понадобится...*/
    Ответ написан
    1 комментарий