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

Заглушка для роботи із запитами до бази даних у WordPress

16

Наскільки я фанат певних API WordPress для запитів до бази даних, таких як:

Я також прихильник запитів безпосередньо до бази даних, коли це необхідно.

Як ви помітили, є послідовний спосіб, яким я це роблю, і оскільки останнім часом я роблю це частіше, ось базовий формат для роботи із запитами до бази даних у WordPress.

Однак, якщо я це роблю, зазвичай я пам’ятаю про такі речі:

  1. завжди переконайтеся, що запит параметризований (особливо у випадку введення користувачем),
  2. повертати інформацію у вигляді асоціативного масиву.

Перший випадок для безпеки; другий — більш-менш для зручності, щоб спростити ітерацію даних за допомогою функцій масиву PHP.

Запити до бази даних у WordPress

По-перше, важливо зрозуміти дві концепції:

  1. параметризація,
  2. масив_стовпець

Це ядро ​​того, як я пишу свої запити та працюю з їх результатами.

1 Параметризація

Ви можете прочитати більше про це в Codex, але параметризація – це спосіб, за допомогою якого ми можемо писати запити, які працюють для запобігання SQL-ін’єкції.

Зі сторінки Кодексу :

Усі дані в SQL-запитах повинні бути екрановані SQL перед виконанням SQL-запиту, щоб запобігти атакам SQL-ін’єкції. Метод prepareвиконує цю функцію для WordPress, який підтримує як sprintf() -подібний, так і vsprintf() -подібний синтаксис.

Це означає, що метод підтримує такі маркери, як %s, %d і %f під час передачі інформації в запит. Я покажу приклад цього пізніше в публікації.

2 Робота зі стовпцями масиву

Результати таких запитів можна повернути різними способами. А саме як об’єкт, чисельно індексований масив або асоціативний масив. Частіше я люблю використовувати масиви (і я покажу, як це зробити в WordPress пізніше в цій публікації).

Заглушка для роботи із запитами до бази даних у WordPress

Однак причина в тому, що я можу скористатися перевагами array_column. З посібника PHP:

array_column() повертає значення з одного стовпця вхідних даних, ідентифікованого column_key. За бажанням можна надати index_key для індексації значень у поверненому масиві значеннями зі стовпця index_key вхідного масиву.

Це означає, що якщо у вас є масив і він містить купу результатів, кожен з яких має той самий стовпець, ви можете легко просто отримати інформацію, передавши масив у метод, а потім передавши назву стовпця в метод.

Результат? Числово індексований масив значень. Це значно полегшує перебір даних через array_map, за допомогою for або foreach.

Заглушка для запиту до бази даних

Маючи це обґрунтування, ось заглушка, яку я зазвичай використовую, коли працюю безпосередньо із запитами до бази даних:

<?php
global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "
        ",
        $userId
    ),
    ARRAY_A
);

if (empty($results)) {
  return;
}
$results = array_map($results, 'column_name');

А ось приклад із кількома різними відомостями, щоб ви могли побачити , як це працює :

<?php
global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "
        SELECT
            user_id,
            meta_value
        FROM $wpdb->usermeta
        WHERE meta_key LIKE %s
        AND user_id = %d
        ",
        '%wc_authorize_net_cim_customer_profile_id%',
        wp_get_current_user()->ID;
    ),
    ARRAY_A
);

if (empty($results)) {
    return [];
}
$results = array_map($results, 'meta_value');

Запит до таблиці wp_user_meta може здатися дурним, оскільки get_user_meta — це дійсна функція API, але я подумав, що це буде простий запит для розуміння, враховуючи те, що я намагався пояснити в минулому.

У будь-якому випадку я не можу надати запит і не можу впоратися з випадком, коли результати можуть повертатися з кількома стовпцями (у такому випадку вам доведеться працювати з чимось іншим, ніж array_map, але це має бути досить легко, правда? )

Джерело запису: tommcfarlin.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі