Задать вопрос
  • Что значит второй PK в модели БД?

    Либо ограничение, либо индекс - собственно это и есть сам первичный ключ.

    А то что около колонок - это просто подсказка о том, что эта колонка является PK.
    Ответ написан
    Комментировать
  • Как реализовать чексуммы для сетевого протокола уровня приложения?

    При использовании TCP стека (Ethernet, IP, TCP) не гарантируется сохранение целостности.

    Гарантируется.
    Ответ написан
    7 комментариев
  • Как создать программу с готовыми шаблонами для формирования отчётов?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    1. Выбираем язык программирования
    2. Изучаем его
    3. Создаем базу с данными и учимся заполнять и извлекать данные из базы
    4. Пишем программу, которая умеет извлекать данные и выводить отчет
    5. Создаем шаблоны для титульной страницы и остальных страниц, интегрируем в программу

    Ну и все в таком духе.
    Ответ написан
    2 комментария
  • Существует ли способ сохранить OEM лицензию Windows 10 при существенном апгрейде компа?

    @nApoBo3
    Тут два момента, технический и юридический.
    Юридически никак, за исключением возможно хитрого трюка с модернизацией через производителя компьютера.
    Технически, если это не брендовый ПК, то скорее всего активация придет без проблем.
    Ответ написан
    1 комментарий
  • У меня не правильный код?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Код тут действительно неправильный, причем по очень многим параметрам. Много бессмысленных телодвижений, инъекции, плюс условие можно записать оптимальнее. Так что помимо исправления конкретной опечатки от Rsa97, надо править этот код целиком
    $sql = "SELECT * FROM blocks WHERE user_id = ?";
    // выполняем запрос без инъекций. если версия РНР не новая, надо будет дописать эту функцию самому
    $result = $conn->execute_query($sql, [$id]);
    // получаем запрошенную строку, без всяких num_rows и foreach
    $row = $result->fetch_assoc();
    // получаем $block_level, даже если в $row пусто
    $block_level = $row["type"] ?? 0;
    // match - новое выражение в РНР начиная с 8.0 версии. в сто раз аккуратнее чем забор из elseif
    $block_text_type = match ($block_level) {
        1 => "Незначительная блокировка",
        2 => "Частичная блокировка",
        3 => "Полная блокировка",
        default => "Нет блокировок",
    };
    Ответ написан
    2 комментария
  • Как записать base64 в таблицу?

    @d-sem
    Если возникла необходимость заполнять базу данных файлами, то возможно, что базы данных тут не нужны.
    Сохраняйте ссылки на файлы.
    Ответ написан
    Комментировать
  • Как перебрать селекторы через for?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Поменять кавычки с " на `, которые включают режим шаблонных строк.

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Комментировать
  • Как экранировать sql запрос внутри texarea?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это очень просто сделать.
    Надо всего лишь освоить подготовленные выражения.
    Например, почитав вот тут https://habr.com/ru/articles/662523/

    И все запросы, в которых участвуют переменные, выполнять только таким образом.
    А texarea там, или tinymce - это уже без разницы.
    Ответ написан
    1 комментарий
  • Почему при удалении куки возникает ошибка Warning: Cannot modify header information?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы решить эту проблему, надо научиться пользоваться интернетом.
    В частности, освоить такой сложный навык, как взять сообщение об ошибке, вставить в адресную строку своего браузера, и нажать enter
    И после этого с удивлением обнаружить, что объяснений этой ошибки существует несколько миллионов.
    Например https://ru.stackoverflow.com/questions/284578/

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сам по себе вопрос бессмысленный, поскольку вообще ничего не сказано ни о данных, ни об их структуре. Ни о проблемах, которые вызывают необходимость такой "оптимизации".
    Так что на него можно ответить только так же абстрактно.
    Превращать JSON в EAV глупо.
    Так что вопрос здесь не в том, размазывать ли JSON по строкам, а в том, нужен ли он здесь вообще.

    Если в JSON поле лежат структурированные данные, то их в обязательном порядке надо развернуть в обычную таблицу/связанные таблицы.
    Если же лежит всякий мусор навалом - то можно оставить, но при этом придется делать отдельную таблицу или куда-то ещё записывать эталонную структуру этого JSONа, чтобы не оказалось, что одно и то же значение пишется под десятью разными ключами. Но опять же, судя по постановке вопроса, скорее всего автору нужна одна нормальная таблица с нормальными столбцами.

    Кроме того, никакого "login" в качестве идентификатора быть не должно, а должен быть первичный ключ.
    Ответ написан
  • Зачем указывать адрес?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    если приложение итак находится на машине, имеющей свой адрес

    Какой из? Даже у машин с одной сетевухой всегда два адреса - второй всегда 127.0.0.1. А вообще могут быть машины с двумя, тремя, ... N сетевухами...
    Ответ написан
    2 комментария
  • Как решить php выдает ошибку при подключении к БД?

    syamskoy
    @syamskoy
    У вас код написан с синтаксисом PHP 8, а запускаете вы код на более старой версии PHP, которая не понимает этот синтаксис. Конкретно речь идёт об именованных аргументах. Обновите PHP или пишите без имен аргументов.
    Ответ написан
    Комментировать
  • Как вынести запросы rest api на постоянное соединение?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ответ тут очень простой - никак.
    Мало того, что вешать все запросы на одно соединение просто глупо, когда БД может обрабатывать их тыщи. И та же нода, если делается по-уму, то использует пул соединений, а не одно.
    Но, главное, РНР так не работает.

    И проблема здесь не в количестве соединений, а в том, кто писал код.
    Если в коде используется только одно соединение за все время работы скрипта (а не открывает новое соединение на каждый запрос, как у всех гениальных скриптописателей), и база данных устроена по уму (не тормозит), то хватит даже самого дохлого хостинга с лимитом в 5 одновременных подключений. Просто потому что любой запрос к рест апи должен работать не дольше 0.01 секунды. И любые проблемы будут появляться только при частоте обращений больше 100 в секунду.

    Соответственно, вместо фантазий про "одно соединение" надо переделывать кривой код и базу данных.
    Ответ написан
    Комментировать
  • Vcc и Vdd, Vss и Vee как распознать где плюс, а где минус на схемах?

    @nehrung
    Не забывайте кликать кнопку "Отметить решением"!
    Всё элементарно просто. Набираете в поисковой строке Гугла такой текст - 1602 datasheet. Гугл выдаёт вам почти 4000000 ответов. Выбираете тот, который нравится. Мне понравился вот этот - https://www.openhacks.com/uploadsproductos/eone-16...
    Третья страница этого даташита содержит исчерпывающий и (главное!) точный ответ на ваш вопрос:
    646bc37a97154080252001.jpeg
    Точно так же поступайте и в дальнейшем - тем самым вы сохраните наше время для действительно интересных и важных вопросов (вместо того, чтобы быть при вас личным поисковым оператором), заодно и научитесь гуглить. Возможно, не сразу, возможно с тысячной попытки, но таки научитесь.
    Ответ написан
    2 комментария
  • Усиливает ли коммутатор сигнал ethernet?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Если я вставлю в каждом 100метре один коммутатор

    то будет полная фигня и отсутсвие линка. Задача решается принципиально другим способом.

    - берется план завода
    - выделяется место для создания центрального узла (серверная) в соттветствии с местнвми реалиями. Поскольку сама по себе сеть нафиг не нужна - значит, она тянется для чего-то. Значит, сервера будут.
    - от серверной в локальные узлы (точки расположения управляемых коммутаторов) тянется оптика. На относительно небольшое расстояние пойдет более дешевая многомодовая..
    - от локальных коммутаторов растягивается сеть
    - если хотите бить на сегменты - бить можно на центральном узле, поставив туда микротик
    Ответ написан
    2 комментария
  • Экранирование sql запросов, достаточно ли функции?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Эта функция не самописная, а цельнотянутая. Причем из самых смрадных помоек интернета.
    К защите от инъекций не имеет вообще никакого отношения.

    - trim() ни к инъекциям, ни к защите отношения не имеет
    - stripslashes() просто бессмысленная функция, которая только портит данные
    - htmlspecialchars() не имеет отношения к SQL. Применяется при выводе данных, а не при получении
    - real_escape_string() - единственная функция, которая имеет отношение к SQL, но при этом вообще не предназначенная ни для каких защит.

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

    Возьмем классический пример
    $_GET['id'] = '1;DROP TABLE Students;';
    $id = formatstr($_GET['id']);
    $sql = "SELECT * FRPM Students WHERE id=$id";

    И посмотрим, помогло ли ваше самописное экранирование предотвратить хоть что-то (спойлер: нет).
    (да, та функция, которую лично вы используете для выполнения запросов, выполняет только один запрос за раз. И вместо инъекции вы получите ошибку. Но это не отменяет сам факт получения инъекции.)

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

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Уважаемый пользователь.
    У тебя из 10 вопросов 9 вопросов про то. как стать разработчиком и поменьше учить.
    Прекрати такое поведение.

    Не хочешь учиться - выбери другое направление, кроме ИТ полный мир возможностей.
    Ну или учи свою верстку, работай всю жизнь джуниором, никто тебя за уши в сеньоры не тянет и не заставляет.
    Хочешь - учи, не хочешь - не учи.
    Читай вакансии и требования в вакансиях, зачем тебе советы рандомных людей из интернета, если ты постоянно спрашиваешь почти одно и тоже, хотя тебе уже отвечали.
    Ответ написан
    18 комментариев
  • Как работает замыкание в js?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    function createCounter() { 
        let counter =0; 
       counter = counter - 10  
        const myFunction = function () { 
            counter = counter+1; 
            return counter 
        } 
        return myFunction 
    } 
    let z = createCounter() // Вернули в переменную z функцию "myFunction" у которой в замыкании есть counter.
    // counter внутри на данный момент равен -10.
    
    // Вызвали функцию и вывели результат в консоль.
    // Так как внутри функции counter берётся из замыкания, то при вызове функции получаем
    // -10 + 1
    console.log(z()) // -9
    
    // В данном примере - бесполезный ничего не делающий вызов.
    // То есть создаётся ещё один НОВЫЙ счётчик, со своим замыканием, но он никуда не сохраняется.
    createCounter() 
    
    // Снова вызвали функцию и вывели результат в консоль.
    // -9 + 1 
    console.log(z()) //  -8


    где я допускаю ошибку

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

    Второй вопрос откуда берется counter при втором вызове console.log(z())

    Да всё оттуда же. Из замыкания. Когда Вы в первый раз вызвали функцию createCounter и сохранили результат её работы в переменную z - Вы в переменную z поместили функцию myFunction, у которой есть своё собственное замыкание на counter.
    При каждом вызове z() будет вызываться та созданная функция со своим замыканием и оперировать с counter из него.

    При новом вызове createCounter возвращается НОВАЯ функция myFunction у которой своё независимое от предыдущих вызовов замыкание.
    То есть createFunction это как фабрика, которая выпускает одинаковые изделия(счётчики от -10, в данном случае), но изделия не зависят друг от друга.
    Ответ написан
  • Как правильно организовать поиск по большому кол-во бд?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Как сделать поиск максимально производительным?
    Вопрос из серии "какая машина самая крутая?". Нет решения которое подходит под любой вариант базы и структуры, иначе все только одним им и пользовались, логично?

    Есть несколько больших postgresql таблиц(по ≈ 1млн строк в каждой).
    Это таблицы среднего размера, ничего большого в них нет. Миллион записей это средняя таблица со статистикой, все должно работать достаточно быстро и без каких-то особых танцев.

    Пользователь вводит номер, ему выдаётся инфа из бд.
    Ну так сами пробовали сделать 20-30 рандомных запросов и посмотреть скорость, explain, использование индексов? Или мы "боимся заранее"?

    Что использовать? Асинхронность? Многопоточность?
    Мозги, используйте мозги, это гораздо эффективнее...
    Ответ написан
    Комментировать