• Разбить массив и добавить в БД?

    uDenX
    @uDenX
    PHP Developer
    Собрать из значений запрос на вставку либо сделать подготовленный запрос и в цикле делать вставку
    Ответ написан
    Комментировать
  • Как посчитать кумулятивную сумму уникальных пользователей?

    @galaxy
    Ну так примерно (если не смущает довольно избыточный self-join):
    select t.day_no, count(distinct t2.user_id)
      from t
      join t as t2 on (t2.day_no >= t.day_no)
     group by 1
     order by 1 desc


    sqlfiddle
    Ответ написан
    Комментировать
  • В чем моя ошибка в запросе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ошибка потому, что ваш вызов $conn->query(...) транслируется в mysqli::query($conn, ...), а эта функция ждёт ровно два параметра. Первый - соединение, второй - текст запроса.
    Для использования подготовленного запроса, его необходимо сначала подготовить (prepare), затем связать плейсхолдеры с переменными (bind_param) и только после этого выполнить (execute).
    Ну и апострофы у вас неправильные, имена баз данных, таблиц, и полей берутся в обратные апострофы (`).
    Ответ написан
    3 комментария
  • Что быстрее отрабатывает — запрос к файлу или в БД?

    romesses
    @romesses
    Backend инженер
    Зачем плодить доморощенные форматы данных, когда есть SQLite?
    И в коде сразу будет понятно что происходит, достаточно будет посмотреть на SQL запрос.

    Добавлено
    А если MySQL уже подключена, то вопрос вообще теряет смысл. Нужно просто использовать SQL где можно.

    Кроме того, что у вас за проблема с запросом на MySQL, что вы решились на сравнение?
    Ответ написан
    Комментировать
  • Почему не работает сортировка в мультигруппировке в Mysql?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ваш запрос сначала выполняет группировку, а потом результат группировки сортирует по created_date.
    Вот только в группу могут войти несколько строк с разными значениями created_date. Какое именно из этих значений должно попасть в финальную выборку и почему?
    MySQL не гарантирует, что это значение будет из конкретной строки. И не гарантирует, что при каждом следующем запросе это значение будет из одной и той же строки.
    А начиная с версии 5.7 ваш запрос вообще может выдать ошибку, поскольку по умолчанию включён режим ONLY_FULL_GROUP_BY.
    https://dev.mysql.com/doc/refman/5.7/en/group-by-h...
    Ответ написан
    6 комментариев
  • Как работает шифрование и подпись файлов?

    Jump
    @Jump
    Системный администратор со стажем.
    Шифрование это видоизменение информации, таким образом чтобы ее без ключа прочитать невозможно было.
    Никаких сертификатов для этого не требуется.

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

    Пользователь добавляет все центры сертификации которым он доверяет в "Доверенные" и сразу появляется доверие ко всем сертификатам выданным этими центрами.

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

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    А что, в гугле забанили?

    Корневой сертификат нужен для того, чтобы проходила проверка валидности сертификата. Ты выпускаешь себе сертификат - но доверия к нему нуль. Ты должен либо каким-то образом убедить/заставить всех тех, кто будет читать твою почту например поставить себе этот сертификат в доверенные (это в энтерпрайзе просто - сунул в политику и всем разлетелось).
    В этом и смысл выпуска сертификата в CA с мировым признанием - хотя бы в LE - чтобы проходила проверка валидности без танцев с корневым сертификатом.
    Подпись не изменяет содержимое файла - его можно будет прочитать. Подпись гарантирует, что файл в процессе доставки не был изменен.
    Шифрование изменяет файл - его нельзя будет прочитать, но злонамеренный чел может его модифицировать - и его нельзя будет расшифровать.
    Подпись шифрованного файла гартантирует, что шифрованный файл не был изменен и он нормально расшифруется.
    Ответ написан
    4 комментария
  • Что будет за использование чужих ассетов в проекте с открытым исходным кодом?

    zenwalker
    @zenwalker
    0xABADBABE
    Как я должна указывать права на эти самые ассеты и могу ли вообще их использовать?

    Здесь всё просто. Если автор этих произведений явно разрешает вам использовать их в той форме, в которой вы их используете — у вас нет проблем, если не разрешает — не можете. Если автор произведений и условия, по которым они лицензируются не известны, либо не оговорены — это просто интеллектуальная собственность, с которой вы ничего не можете делать. Иными словами, только смотреть там, где они сейчас находятся, но не копировать, не распространять и не использовать в личных произведениях.

    Репозиторий под открытой лицензией

    Вы упомянули, что используете изображения «с другого сайта» а их лицензия как раз может быть несовместима с вашей и запрещать такого рода использование и распространение.

    Какие последствия этого и можно ли как-то через упоминание автора избежать писем добра?

    Упоминание автора вы можете сделать только при условии, что он на это согласен: либо ввиде пункта в тексте лицензии (то есть там есть пункт а-ля «разрешено использовать при наличии ссылки на автора»), либо ввиде личного согласия автора о том, что он не будет иметь претензий к такой форме использования.

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

    P.S.: Не юрист.
    Ответ написан
    Комментировать
  • Как правильно проверить?

    @d-stream
    Готовые решения - не подаю, но...
    а потом у человека окажется две хонды...

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

    @x_shader
    Oracle & Coffee
    Может. Смотрите Self-Referential Integrity Constraints.
    Ответ написан
    Комментировать
  • Насколько актуален чистый PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Цель какая?
    Устроиться наконец на работу? Стать "разработчиком на чистом пхп"? Писать модули на Си для пхп?
    Если первое - учите фреймворки, тот же ларавель, идите работать, учитесь у коллег, читайте книжки, смотрите хорошие курсы... Во первых так вы сразу убиваете 2 зайцев - и учитесь и получаете деньги. Во вторых, если вы этого не знали, вы ВСЕ РАВНО будете практически всю жизнь учиться и читать, если уже пошли по этой кривой дорожке.
    Ответ написан
  • Как возвратить новый массив в PHP?

    E1ON
    @E1ON
    Programming, Gamedev, VR
    <?php
    
    $prices = [12000, 51600, 700, 10];
    $sale = 40;
    
    function pricesWithSale($sale, $prices) {
        foreach($prices as $key => $price) {
            $prices[$key] = ($price * $sale) / 100;
        }
        
        return $prices;
    }
    
    $prices = pricesWithSale($sale, $prices);
    var_dump($prices);
    Ответ написан
    Комментировать
  • Как часто нужна модель MVC?

    Stalker_RED
    @Stalker_RED
    Да, это полезно - написать свой фреймворк и/или CMS.
    Потом полезно сравнить его с laravel или symfony, найти чем ваш фреймворк лучше.
    Если ничем не лучше - можете его смело забросить, и переходить на что-то общеизвестное, и вот почему:

    Представим, что у вас заказали лендинг по заказу насосов, например, и вы сделали его на своем фреймворке. Через 5 лет вы сменили род деятельности, и водите экскурсии по Тасмании. Или вас укусил радиоактивный паук, и теперь вы спасаете мир, а поддержкой сайтов не занимаетесь.

    Сервис с насосами за это время вырос, они теперь еще и бурят скважины, и фильтры устанавливают и колодцы копают, и у них филиалы в 20 городах. Им нужно доработать сайт. И при поиске разработчика выясняется, что сайт ваш доработать невозможно, т.к. документации по фреймворку нет, готовых модулей совместимых нет, интеграций с 1C, google docs, microsoft sharepoint нет, и никогда не будет. И проще переписать с нуля, чем разбираться как оно у вас там устроено.

    А если бы сайт был на общеизвестном фреймворке, то гораздо проще найти и специалистов и найти готовые интеграции.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    нормальный ответ на этот вопрос
    а то щас набегут со ссылками, или вон - фильтрами с подвыподвертом.

    foreach ($results as $key => $item) {
        if ($item['id'] === 4) {
            unset($results[$key]);
        }
    }
    Ответ написан
  • Как удалить элемент массива по значению с двумя одинаковыми ключами?

    @Vitsliputsli
    Как достичь результата Array ( [key] => 1 [key2] => 3 ) при исходных данных?

    Никак, на этапе создания массива $arrays = [ "key"=> 1, "key"=>2, "key2"=> 3 ], элемент с ключом key получил значение 1, а затем значение было переписано на 2, соответственно 1 значение безвозвратно потеряно.
    Опишите задачу которую решаете, а не только как решаете.
    Ответ написан
    Комментировать
  • Как вычесть один день из даты в массиве?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В чём задача? Показывать записи, до конца действия которых осталось меньше суток?
    С этим гораздо лучше справится сама БД:
    SELECT `ads_title`, `ads_period_publication`
      FROM `uni_ads`
      WHERE `ads_id_user` = :iduser
        AND `ads_period_publication` BETWEEN NOW() AND NOW() + INTERVAL 1 DAY
    Ответ написан
    Комментировать
  • SQL инъекция в UPDATE возможна ли?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Инъекция может быть через любой запрос.
    И защищать тоже надо любые запросы.
    Никогда не надо торговаться, "а можно я не буду защищать именно этот запрос? Ну мааааам!"
    Надо просто всегда следовать простым правилам - любая переменная попадает в запрос только через плейсхолдер

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

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

    То есть сама уязвимость никак не зависит ни от каких второстепенных факторов - типа запроса, передаваемых данных, способов их валидации, твоих знаний SQL. Это сам факт. Можно подставить свой код в запрос? Значит он уязвим. А как конкретно можно нагадить - это отдельная тема.

    Кроме того, любая уязвимость - это всегда ошибки. Если в $id будет пусто, то запрос вызовет ошибку. Если в $id будет слово select то запрос вызовет ошибку. Если будет слово "привет", то запрос вызовет ошибку. Оно тебе надо?

    При этом разных вариантов возможных ошибок и способов воспользоваться уязвимостью - тысячи, им посвящены целые учебники и статьи. Но для того чтобы защищаться, не надо знать ни одного. Потому что защищаться надо не от отдельных способов эксплуатации, а закрывать саму уязвимость. И сделать это очень просто:
    1. Любые данные должны добавляться в запрос только через плейсхолдеры
    2. Любые другие элементы запроса должны выбираться из белого списка - заранее прописанных в нашем коде значений.


    Если вопрос "а можно я не буду защищаться?" вызван ленью, то это тоже решаемо. В принципе, лень - это очень важное качество для программиста. Главное - направить её в нужное русло.

    Если каждый раз писать по три строчки долго
    $sql = "INSERT INTO users SET email = ?, password = ?"; // заменяем на знаки вопроса
    $stmt = $db->prepare($sql); // подготавливаем запрос, получаем stmt
    $stmt->bind_param("ss", $email, $hash); // два знака вопроса - две переменных - две буквы s
    $stmt->execute(); // выполняем запрос

    То надо воспользоваться такой вещью, как программирование. И написать функцию, которая возьмет на себя всю рутинную работу.
    function prepared_query($mysqli, $sql, $params, $types = "")
    {
        $types = $types ?: str_repeat("s", count($params));
        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param($types, ...$params);
        $stmt->execute();
        return $stmt;
    }

    и в итоге предыдущие 4 строчки превратятся в одну:
    prepared_query($db, "INSERT INTO users SET email = ?, password = ?", [$email, $hash]);

    или твой запрос:
    prepared_query($db, "UPDATE table SET test WHERE id = ?", [$id]);

    - просто, быстро, удобно и безопасно
    Ответ написан
    26 комментариев
  • Как сократить время выполнения SQL запроса?

    BorLaze
    @BorLaze
    Java developer
    Можно поступить еще хитрее, и вычислять необходимые данные при добавлении.

    Не понадобятся 10к записей, достаточно четырех значений - мин, макс, среднее и количество поступивших данных.

    С минимумом/максимумом, думаю, проблем не будет, алгоритм расчета нового среднего на базе предыдущего описан здесь.
    Ответ написан
    Комментировать
  • В чем ошибка SQL запроса?

    @sidni
    Php Developer
    Помоему конструкция FROM недопустима при Update и SET идет после INNER JOIN
    Ответ написан
    3 комментария