• Как пропустить итерацию если команда вызывает ошибку PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Объясняем для самых маленьких: В коде НЕ ДОЛЖНО быть ошибок синтаксиса.
    Ошибки синтаксиса надо не "пропускать", а не допускать.

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

    Поскольку ты пока еще вообще не понимаешь, как работать с БД из пхп, то никакой динамической сборки запроса. Только руками:
    $sql = "INSERT INTO oc_product_description SET field1 = ?, field2=?, ...";
    $stmt = $this->db->prepare($sql);
    $stmt->execute(array_values($product['oc_product_description']));


    Остальные ответы это ад.
    А потом мы ходим и удивляемся - почему об пэхапэшников все ноги вытирают.
    Вот из-за таких ответов и вытирают
    Ответ написан
    Комментировать
  • Как сменить кодировку верхнего индекса из UTF-8 в windows-1251 на php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.
    в кодировке windows-1251 примерно 200 символов
    в UTF-8 - миллионы.
    Запихнуть миллион символов в 200 физически невозможно.
    Поэтому либо перестать использовать у себя пещерную кодировку, либо городить ручную замену для всех неподдерживаемых символов, тупо строковой заменой.
    Ответ написан
    Комментировать
  • Так можно ли обойти mysqli_real_escape_string?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    $id    = "1; DROP TABLE users;"
    $id    = mysqli_real_escape_string($link, $id);
    $query = "SELECT * FROM users where id = $id";

    свободен

    Судя по числу подписчиков, этот вечнозеленый вопрос все ещё будоражит некорепшие умы.
    И надо в который раз повторить очевидную вещь: вопрос сам по себе изначально некорректный.
    Поскольку функция mysqli_real_escape_string Не имеет. Никакого. Отношения. К SQL инъекциям. То, что эта функция предназначена для защиты от инъекций - самое древнее и заскорузлое суеверие хомячков от похепе.
    На самом деле это функция для форматирования строк. К инъекциям отношения не имеет и применяться для защиты не должна.
    Для защиты служат подготовленные выражения.
    Ответ написан
  • Memory_get_usage на хостинге и Денвере отличаются показатели, Почему?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Операционная система, её разрядность, загруженные расширения - всё влияет.
    Ответ написан
    Комментировать
  • Нужно ли делать кеширование запросов и как?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я думаю здесь подмена понятий. Автор пишет "кэширует ли БД запросы", а имеет в виду "может ли в принципе эта страшная и непонятная громадина которая называется базой данных в принципе хоть когда-нибудь рабтотать быстро?"
    Все, разумеется, кидаются отвечать на первый вопрос.
    А на самом деле надо отвечать на второй. Да, почти всегда БД работает гораздо быстрее чем ты можешь вообразить и ничего кэшировать не нужно. Если вдруг стало работать медленно... впрочем, об этом ниже.

    Нужно ли делать кеширование запросов
    Вот в такой формулировке, взятой с потолка, "а не закэшировать ли мне запросы к базе данных*" - Нет, не нужно.

    и как?
    Очень просто.
    Три простых шага:
    1. Понять, устраивает ли тебя производительность приложения. Если устраивает, то все оставить как есть.
    2. Если не устраивает, освоить профайлинг. Если это слово не упоминается в вопросе про производительность или кэширование, то вопрос можно сразу удалять. потому что он заведомо взят с потолка и не имеет смысла. По сути, профайлинг - это замер скорости выполнения отдельных участков кода для поиска узких мест - т.е. таких участков кода, которые тормозят всю программу. Это можно делать и вручную, и с помощью различных готовых инструментов. Только по результатам профайлинга, который показал конкретную причину тормозов, то самое узкое место (его еще называют bottleneck, "бутылочное горлышко"), можно приступать к оптимизации. Не кэшированию!
    3. Если профайлинг показал, что проблема в конкретном запросе к БД, приступаем к его оптимизации. Чаще всего достаточно добавить индекс или донастроить сервер.
    4. Только если все другие способы не помогли - занимаемся кэшированием. Но перед этим сначала решаем Вторую Важнейшую Проблему Информационных Технологий - инвалидации кэша. Поскольку закэшировать - это ерунда, каждый дурак сможет. Самая главная проблема не в том, как данные положить в кэш, а как и когда их оттуда удалять.
    Ответ написан
    Комментировать
  • Как поправить ссылку при отправке?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Ещё один вариант

    //убираем справа любое кол-во слешей если они есть и добавляем свой обязательный слеш
    $url = rtrim($url, '/').'/';
    Ответ написан
    Комментировать
  • Как правильно реализовать CRUD при работе с DDD и Yii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    1. В DDD подразумевается предметная разработка. Соотвественно CRUD тут не совсем правильно делать. Тут нужно работать с UseCase: создай товар, удали товар, оплатить товар, архивировать товар. Это уже больше чем CRUD.
    2. Во фреймворке делайте своё ядро, которое принимает DTO. Запихиваете данные в DTO далее передаёте в сервис, обрабатываете данные и пихаете через Repository в базу. В принципе все просто. Можете посмотреть курс Елисеева Дмитрия по работе с интернет магазином. Если говорить о примерах, то вот, правда на симфони.

    Так же есть пример из самого магазина
    Ответ написан
    2 комментария
  • Как распараллелить парсинг и загрузку в БД на php?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Если делать в один поток:
    (Сначала, работаем БЕЗ базы)
    1. Берём CSV и расставляем (формируя два новых файла рядом!) через консольный скрипт/программу в нём ID-шники согласно "таблице-связке" (которая тоже в файле хранится, её изначально надо будет сделать однократно): [ID в CSV] -> [ID в нашей базе]. Это может быть как артикул, так и название (или любой другой уникальный параметр для одной уникальной записи, включая хэширование).
    Получаем CSV2-update (связанные записи) и CSV2-new (записи, которых нет в нашей БД).

    (сортировка - по желанию, но она не нужна)

    (Начинаем работать с базой)
    2. Обновляем сначала те, что есть: CSV2-update
    3. Затем, добавляем в БД новые позиции: CSV2-new.

    4. После добавления - обновляем файл "таблицы-связок".

    Итог:
    1. Мы все "тяжёлые" операции делаем ВНЕ базы.
    2. Мы ничего не ищем по базе, а сразу берём нужную запись по ID ("ключу").

    Захотите сделать сразу всё и мультипоточно на PHP: pthreads в помощь!
    Ответ написан
    Комментировать
  • Почему PhpStorm требует установки расширения для curl и json?

    Ninazu
    @Ninazu
    Расширение - это дополнительные модули в PHP, они реализуют конкретно в вашем случае работу с CURL и JSON.
    Узнать подключенные модули
    https://www.php.net/manual/ru/function.extension-l...
    Список всех модулей
    https://www.php.net/manual/ru/extensions.alphabeti...

    Если на вашем сервере они установленны, то не факт что они будут установленны и на другом сервере. Поэтому PHPStorm рекоммендует добавить их в правила композера, чтоб в случае разворачивания на другом сервере, композер сообщил вам что расширения отсутсвуют

    Если бесит инспектор, то можете отключить это уведомление.
    5d4061ba05631701466003.png
    Ответ написан
    3 комментария
  • Как работает наследование статических методов в php?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Статические ссылки на текущий класс, такие как self:: или __CLASS__, вычисляются используя класс, к которому эта функция принадлежит, как и в том месте, где она была определена
    ...
    Позднее статическое связывание пытается устранить это ограничение, предоставляя ключевое слово, которое ссылается на класс, вызванный непосредственно в ходе выполнения.
    Позднее статическое связывание

    Решение:
    public static function getMessage(): string
    {
      return 'message - ' . static::getString();
    }
    Ответ написан
    1 комментарий
  • YII2 генерация связей для таблиц MyIsam?

    @karminski
    Senior React.JS Developer
    MYISAM не поддерживают FOREIGN KEY. Используйте InnoDB для этого. По поводу поля COMMENT - такой поддержки нет.
    Ответ написан
    Комментировать
  • Можно ли сделать проект в yii без командной строки?

    qonand
    @qonand
    Software Engineer
    Можно, как это сделать описано в официальной документации. Но вот только зачем? работать с помощью Composer гораздо удобнее и надежнее
    Ответ написан
    5 комментариев
  • Как сделать такую валидацию в YII2?

    @polar-bear
    Возможно как то так,
    [
        ['user_id', 'invite_id'],
        'unique',
        'targetAttribute' => ['user_id', 'invite_id'],
        'filter' => [
            'or',
            ['user_id' => $this->invite_id],
            ['invite_id' => $this->user_id],
        ]
    ],
    Ответ написан
    1 комментарий
  • Почему не работает RBAC в Yii2?

    27cm
    @27cm
    TODO: Написать статус
    Yii::$app->user->getId() == 76?
    Ответ написан
    1 комментарий
  • Как развернуть проект на yii2?

    bitver
    @bitver
    XAMPP, это значит у вас Apache, это значит заходите в getting started в документации, ищите что там написано про Apache и осознаёте что вам нужно делать. Вангую, скорее всего что-то в .htaccess не то.
    Ответ написан
    Комментировать
  • Как запретить повторную отправку запроса во время выполнения первого?

    Шлите запрос AJAX, пока не будет получен ответ с положительным статусом - блокируйте кнопку отправки. Если получена ошибка - аналогично, разблокируйте кнопку и позвольте еще раз отправить данные.
    Ответ написан
    2 комментария
  • Yii 2 миграции вставка нескольких строк?

    des1roer
    @des1roer Автор вопроса
    ученье - свет, а неученье - приятный полумрак
    <?php
    
    use yii\db\Migration;
    
    class m160322_045630_add_catalog_data extends Migration {
    
        public function safeUp()
        {
            Yii::$app->db->createCommand()->batchInsert('country', ['name'], [
                ['Австралия'],
                ['Австрия'],
                ['Азербайджан'],
                ['Албания'],
            ])->execute();
     
        }
    
        public function safeDown()
        {
            Yii::$app->db->createCommand()->delete('country', ['in', 'name', ['Австралия', 'Австрия', 'Азербайджан', 'Албания']]
            )->execute();
    
        }
    Ответ написан
    Комментировать
  • Где вставлять функцию(метод)?

    bitver
    @bitver
    В модели getShortText() реализуйте как хотите и используйте $model->shortText
    Ответ написан
    8 комментариев
  • Почему не работает роутинг на Yii2? на OpenServer?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Добавлю к тому что написал Mylistryx , что бы потом проще на сервер перенести создаем в папке domains папку mysite в ней папку yii и рядом с ней папку public_html весь framework кидаем в yii, все из папки basic/web в public_html.
    Далее:
    1. В опен-сервере включаете управление доменами Ручное+Автопоиск (можно просто ручное)
    2. Добавляете домен (к примеру) mysite .local, папка для него \mysite\public_html
    3. Правим пути в index.php, согласно новому расположению
    Перезапускаете сервер и все работает!

    Таким образом мы выносим фреймворк за пределы публичной папки, что хорошо.
    Ответ написан
    2 комментария
  • Какие уроки по Laravel (PHP) и по node (JS) посоветуете?

    muhammad_97
    @muhammad_97
    PHP-разработчик
    По Laravel - дока, по ноде - уроки от Ильи Кантора: https://youtu.be/5s9GamjYQpo
    Ответ написан
    Комментировать