✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Прямі запити до бази даних у WordPress

18

Якщо ви повернетесь до будь-якої з публікацій, які я написав за останні, скажімо, два роки, ви, ймовірно, побачите, що я майже кожного разу пропоную використовувати доступні 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, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі