✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Punkt do pracy z zapytaniami do bazy danych w WordPress

26

Jestem fanem niektórych API WordPressa do odpytywania bazy danych, takich jak:

Jestem również fanem zapytań bezpośrednio do bazy danych w razie potrzeby.

Jak zauważysz, robię to w spójny sposób, a ponieważ ostatnio robię to częściej, oto podstawowy format do pracy z zapytaniami do bazy danych w WordPress.

Jeśli jednak to zrobię, generalnie są rzeczy, o których pamiętam:

  1. zawsze upewnij się, że zapytanie jest sparametryzowane (szczególnie w przypadku wprowadzania danych przez użytkownika),
  2. zwracać informacje w postaci tablicy asocjacyjnej.

Pierwsza sprawa dotyczy bezpieczeństwa; drugi jest mniej więcej dla wygody, aby uprościć iterację danych za pomocą funkcji tablicowych PHP.

Zapytania do bazy danych w WordPress

Po pierwsze, ważne jest zrozumienie dwóch pojęć:

  1. parametryzacja,
  2. kolumna_tablicy

To jest sedno tego, w jaki sposób piszę moje zapytania i pracuję z ich wynikami.

1 Parametryzacja

Możesz przeczytać więcej na ten temat w Kodeksie, ale parametryzacja to sposób, w jaki jesteśmy w stanie pisać zapytania, które zapobiegają wstrzykiwaniu SQL.

Ze strony Kodeksu :

Wszystkie dane w zapytaniach SQL muszą zostać poddane kodowaniu SQL przed wykonaniem zapytania SQL, aby zapobiec atakom typu SQL injection. Metoda preparerealizuje tę funkcjonalność dla WordPressa, który obsługuje zarówno składnię podobną do sprintf(), jak i do vsprintf() .

Oznacza to, że metoda obsługuje tokeny, takie jak %s, %d i %f podczas przekazywania informacji do zapytania. Przykład tego pokażę w dalszej części postu.

2 Praca z kolumnami tablicy

Wyniki takich zapytań mogą być zwracane na wiele różnych sposobów. Mianowicie jako obiekt, tablica indeksowana numerycznie lub tablica asocjacyjna. Częściej niż nie, lubię używać tablic (i pokażę, jak to zrobić w WordPressie w dalszej części tego postu).

Punkt do pracy z zapytaniami do bazy danych w WordPress

Powodem jest jednak to, że mogę skorzystać z array_column. Z instrukcji PHP:

array_column() zwraca wartości z pojedynczej kolumny danych wejściowych, identyfikowanej przez column_key. Opcjonalnie, index_key może być dostarczony do indeksowania wartości w zwróconej tablicy przez wartości z kolumny index_key tablicy wejściowej.

Oznacza to, że jeśli masz tablicę i zawiera ona kilka wyników, z których każdy ma tę samą kolumnę, możesz łatwo po prostu przekazać informacje, przekazując tablicę do metody, a następnie przekazując nazwę kolumny do metody.

Wynik? Numerycznie indeksowana tablica wartości. To znacznie ułatwia iterację danych przez array_map, używając for lub foreach.

Skrót do przeszukiwania bazy danych

Mając to uzasadnienie, oto skrót, którego zwykle używam, gdy pracuję bezpośrednio z zapytaniami do bazy danych:

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

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

A oto przykład z kilkoma różnymi informacjami, dzięki czemu możesz zobaczyć , jak to działa :

<?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');

Zapytanie o tabelę wp_user_meta może wydawać się głupie, ponieważ get_user_meta jest prawidłową funkcją API, ale pomyślałem, że będzie to łatwe zapytanie do zrozumienia, biorąc pod uwagę to, co próbuję wyjaśnić w przeszłości.

W każdym razie nie mogę podać zapytania ani poradzić sobie z przypadkiem, w którym wyniki mogą wrócić z wieloma kolumnami (w takim przypadku będziesz musiał pracować z czymś innym niż array_map, ale to powinno być wystarczająco łatwe, prawda? )

Źródło nagrywania: tommcfarlin.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów