• Есть функция, как "заставить" эту функцию вывести строку в echo?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Можно в режиме телепата гадать 100500 раз о том что происходит.
    По факту вопрос слишком абстрактный, научитесь дебажить код.
    Идеально было бы поставить xdebug и ide которая умеет с ним работать, но на крайний случай вас спасут print_r и var_dump.
    Прямо с начала, берете, и для каждой строчки по очереди проверяете - те ли данные вам пришли, что вы ожидали, те ли строки сформировались что вы ожидали, итд.
    это собственно и есть - работа программиста.


    По теме вопроса: раз echo ничего не выводит - значит там ничего нет, магии не бывает.
    (и кстати опять же в режиме телепата - у вас скорее всего выключен вывод нотисов)

    Причин почему там ничего нет - может быть море:
    - curl_exec($curl) может вернуть не строку, а false, и в функции curl_error($curl) будет текст ошибки.
    - curl_exec может вернуть строку в которой нет json
    - curl_exec может вернуть строку в которой есть json, но в нем структура какая-то не такая как вы ожидаете (например ошибка или еще что-то)

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

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Рискну предположить что вы хотите что-то типа php.net/manual/en/function.compact.php
    Ответ написан
    Комментировать
  • Конкатенатор php файлов в стиле препроцессора си. Есть такой?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Сам не пробовал, но может быть посмотреть в сторону php.net/manual/ru/book.phar.php ?
    Там даже в комментах есть кусок кода который собирает phar из папки с исходниками.
    Ответ написан
    Комментировать
  • Почему не работает фильтр?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Ладно, отвечу серьезно.

    По поводу самой проблемы:
    Можно в режиме телепата гадать 100500 раз о том что происходит.
    По факту вопрос слишком абстрактный, научитесь дебажить код.

    Конкретный пример: у вас есть ваш "код фильтрации".
    Идеально было бы поставить xdebug и ide которая умеет с ним работать, но на крайний случай вас спасут print_r и var_dump.
    Прямо с начала, берете, и для каждой строчки по очереди проверяете - те ли данные вам пришли, что вы ожидали, те ли строки сформировались что вы ожидали, итд.

    Скорее всего вы поймете в чем проблема сами.
    Даже если не поймете - сможете задать уже конкретный вопрос.
    Ну и хорошо бы вывод всех ошибок и нотисов включать.
    <?php
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);


    Теперь в целом по коду:
    1. Почитайте про MVC. mysqli функции вперемешку с html версткой - недопустимы.
    2. Вынесите всю работу с базой в отдельную либу. есть 100500 готовых решений на гитхабе.
    sql connect в filterTable - очень плохо.
    3. В базу нельзя отправлять user input без обработки! Как минимум нужно делать mysqli_real_escape_string
    4. За запрос where concat(`fullName`, `group_name`) = ... в реальном проекте, увольняют сразу. Запрос не использует индексы и должен для каждой строки таблицы выполнить объединение 2х полей, а потом еще и сравнить. Это дико медленно.
    Нужна такая строка для поиска - собирайте её отдельным полем в базе.
    Ответ написан
  • БД SQL - нормальны ли magic numbers в БД, которые имеют константы в back end коде? Или лучше сделать таблицу и отношение?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Я считаю что нормально иметь такие вещи целиком в php, а в базе держать просто tinyint
    Ответ написан
    Комментировать
  • Возможно объединить 2 запроса в 1?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Не зная точно структуры таблиц и уникальных индексов, ответить однозначно невозможно.
    В целом не советую заниматься таким, перегруженные по логике запросы практически всегда оказываются медленнее чем 2 раздельных запроса.
    Ответ написан
    Комментировать
  • Как организовать работу с миграциями в doctrine при тестировании кода по фичам?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    есть какой-то отдельный скрипт который накатывает на собранную из миграций базу - тестовые данные.
    при сборке проекта на тестовую среду, каждый раз с нуля исполняются миграции структуры и поверх накатываются тестовые данные.
    Ответ написан
    Комментировать
  • PHP. Как очищать массив цикле?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    while($row = $STH->fetch()) {
    это цикл по всем кортежам ответа.
    сразу после этой строчки добавьте
    $test = [];
    Ответ написан
    1 комментарий
  • Как создать правильный SQL-запрос с группировкой и условием?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. SELECT ... COUNT(b.lot_id) ... group by b.lot_id - всегда будет 1.
    Вряд ли вам нужна группировка по lot_id.

    2.
    WHERE NOW() BETWEEN l.created_date AND end_lot_date
    - не будет использовать индекс, лучше явно писать
    WHERE l.created_date <= NOW()  AND end_lot_date >= NOW()


    3. Когда вы пишите запрос с group by - любые выбираемые данные должны быть или явно указаны в group by, или обернуты какими-то аггрегирующими фунциями (count, avg, max, group_concat итд). Иначе SQL тупо не понимает что ему делать с этим.

    Приведу пример для наглядности:
    name  | age
    Петя  | 10
    Вася  | 10

    select age, name from ... group by age.
    В postgress/mssql/oracle это будет ошибка.
    MySQLс дефолтными настройками проглатывает такой запрос, отдавая кортеж в котором age = 10, а name = случайное значение из подходящих name.
    К счастью в MySQL есть замечательный параметр sql_mode который можно установить в only_full_group_by и все начнет работать как у взрослых. (что и произошло в вашем случае, судя по логу)
    Ответ написан
    2 комментария
  • Telegram, php как написать алгоритм пагинации?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Вы добавляете данные в buttons на итерации когда количество элементов в $one_row == вашему количеству колонок (в частном случае 2).
    Соответственно если у вас данных некратное число - то остается огрызок.
    Очевидное решение - после цикла проверять что лежит в $one_row и если нужно - сохранять.
    $columns = 2;
    
    $buttons = [];
    $one_row = [];
    while ($row = mysqli_fetch_assoc($result)) {
        $one_row[] = [
            "text" => $row["test"],
            "callback_data" => "test"
        ];
        if (count($one_row) == $columns) {
            $buttons[] = $one_row;
            $one_row = [];
        }
    }
    if (count($one_row) > 0) {
        $buttons[] = $one_row;
    }
    Ответ написан
    Комментировать
  • Как оптимизировать запрос?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    как то это прям уныло.

    1. Вы джойните таблицу type по id и тут же по нему фильтруете - фильтруйте сразу по event.type, таблица type вообще не нужна

    2. Если нужно за несколько месяцев, то с точки зрения быстродействия, самое быстрое решение выборка
    select DATE_FORMAT(event .dtr,"%Y-%m"), event.type, sum(event.summ),
    from event 
    where event  dtr between ... and ...
    group by DATE_FORMAT(event .dtr,"%Y-%m"), event.type, sum(event.summ)

    и дальше на любом ЯП это обрабатывать.
    Ответ написан
    7 комментариев
  • Как лучше обновлять ASP.MVC сайт на хостинге?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    ключевые слова для изучения:
    система контроля версий (git)
    автодеплой
    Ответ написан
    2 комментария
  • Как организовать структуру базы данных для хранения времени между пунктами (городами)?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Насколько я понял задачу - у вас есть собственная логистика, а есть логистика силами какой-то ТК.
    В этом случае всю связь логично хранить в одной таблице

    id пункта откуда
    id пункта куда
    id тк (собственная доставка - это по факту тоже тк)
    время
    Ответ написан
    Комментировать
  • Обмен Cookie между поддоменами?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Куки можно ставить только на домен и на его поддомены.

    Соответственно глобально вариантов сделать cross-domain cookie ровно 2:
    a) на домене example.com ставите обработчик который вешает куку на нужный домен dev.example.com или вообще на .example.com
    b) на домене dev.example.com ставите обработчик который вешает куку на этот же домен.

    Можно это делать на php, можно это (хоть и не секьюрно) делать через js (вот например либа ) - но в любом случае нужен доступ либо к целевому домену, либо к домену верхнего уровня.
    Ответ написан
    Комментировать
  • Mysql как сделать чтобы id только росло?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    AUTO_INCREMENT
    Ответ написан
    Комментировать
  • (MVC) Хранить ли сумму в модели?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Есть такое в целом правильное мнение, что любую задачу нужно начинать с SQL и 3й нормальной формы и только потом, исходя из профиля нагрузки аккуратно вводить денормализацию и дублирование данных.

    Поскольку у Вас уже Монго - совет в целом запоздал, но все же применим и тут.

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

    В каких-то случаях выгодней считать не лету.
    В каких-то случаях выгодней кешировать и пересчитывать при изменении.
    Ответ написан
    Комментировать
  • Как называется скрипт для работы с БД через Web?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Называется это CRM для интернет магазина.
    Это если нет ничего и нужно с нуля.

    Если база уже есть - то только на заказ писать.
    Ответ написан
  • Какие выбрать технологии для написания такого интернет магазина?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    html, css, javascript, немного php.
    Ответ написан
    Комментировать
  • Как лучше всего организовать связь между двумя удалёнными офисами?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Любая схема с контролером домена AD вне собственной инфраструктуры ущербна по определению.

    Я бы не хотел разводить тут политосрач, но вы новости читаете?
    Вы реально верите что действия РКН имеют собой цель блокировку телеграмма?
    На мой взгляд, схема с любыми ресурсами за пределами РФ в текущей ситуации ущербна в квадрате.
    Ответ написан
    Комментировать
  • Какой sql запрос выполнится быстрее?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    START TRANSACTION;
    select * from users where id = 54 FOR UPDATE
    //проверка бизнес логики на наличие денег
    update `users` set `balance` = `balance` - 150 where `id` = 54;
    COMMIT;


    Запрос "where `id` = 54 and `balance` >= 150" - опасен.
    Innodb лочит не конкретные записи, а диапазоны индексов - при таком запросе в блокировку будут попадать все записи с балансом >= 150, со всеми вытекающими.
    Ответ написан
    Комментировать