✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Прямые запросы к базе данных в WordPress

40

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

И правда в том, что я все еще склоняюсь в этом направлении. То есть, если есть абстракция или API, доступные для выполнения чего-то определенного, я пытаюсь их использовать.

Но в нескольких недавних проектах я работал с относительно большими наборами данных (большими по сравнению с наборами данных не корпоративного уровня). При этом я постарался, чтобы обновления данных происходили как можно быстрее.

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

Использование прямых запросов к базе данных

Прямые запросы к базе данных — одна из тех вещей, которые имеют неоднозначную репутацию среди разработчиков WordPress:

  • они обескуражены в стандартах кодирования,
  • WordPress предлагает прямой доступ к базе данных через $wpdb,
  • есть нюансы запросов к базе данных, которые следует понимать.

Итак, когда вы видите что-то вроде этого :

<?php

private function set_all_scheduled_events_as_public() {

    global $wpdb;

    // @codingStandardsIgnoreStart
    $wpdb->query(
        $wpdb->prepare(
            "
            UPDATE $wpdb->posts
            SET post_status = '%s'
            WHERE post_type = '%s'
            AND post_status = '%s'
            ",
            'publish',
            'tribe_events',
            'future') );
    // @codingStandardsIgnoreEnd
}

Как узнать, хороший это ход или нет? И еще лучше, как узнать, следует ли вам использовать запросы к базе данных каталогов в собственном коде?

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

1 Есть ли индексы в столбцах?

Прежде чем использовать прямые запросы к базе данных в WordPress, нужно проверить, есть ли у столбцов, которые я запрашиваю, индексы для указанных столбцов.

А причина вот в чем :

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

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

Прямые запросы к базе данных в WordPress

Прямые запросы к базе данных зависят от структуры базы данных.

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

2 Параметризируйте свои запросы

При использовании прямых запросов к базе данных чрезвычайно важно параметризовать ваши запросы в целях безопасности. Обо всем этом вы можете прочитать в Кодексе, и это нельзя пропустить.

Прямо из документации :

Более полный обзор экранирования SQL в WordPress см. в разделе Проверка данных базы данных. Это обязательное чтение для всех разработчиков кода WordPress и авторов плагинов.

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

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

3 Тестируйте их и еще раз тестируйте

И, наконец, перед реализацией каких-либо прямых запросов я рекомендую:

  1. Запустив интерфейс SQL и выполняя запросы,
  2. Обратите внимание на любые ошибки, которые они могут вызвать,
  3. Исправьте их и попробуйте еще раз.

Затем, когда у вас есть работающий тест запроса для крайних случаев, чтобы убедиться, что что-то не будет искажено. Это особенно верно, если вы собираетесь использовать предложения LIKE в своих запросах (что, вероятно, само по себе является отдельной статьей).

Мне не хватает API?

Учитывая размер API WordPress, всегда есть вероятность, что я что-то упустил, что-то упустил или просто не разбираюсь в существующих API.

И если это так, то я буду рад исправить информацию, приведенную выше (поэтому не стесняйтесь оставлять комментарии).

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

И если это так, есть несколько способов игнорировать стандарты кодирования без крика PHP CodeSniffer. 🙂

Источник записи: tommcfarlin.com

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