języki: Polski • Italiano • 日本語 Русский • 中文(简体) • 中文(繁體) • 한국어 • (Dodaj swój język)
rozmowa z bazą danych: Klasa wpdb
WordPress definiuje klasę o nazwie wpdb, która zawiera zestaw funkcji używanych do interakcji z bazą danych. Jego głównym celem jest zapewnienie interfejsu z bazą danych WordPress, ale może być używany do komunikacji z dowolną inną odpowiednią bazą danych. Kod źródłowy klasy jest luźno oparty na klasie ezSQL; napisany i utrzymywany przez Justina Vincenta
przy użyciu obiektu $wpdb
Ostrzeżenie: metody w klasie wpdb()
nie powinny być wywoływane bezpośrednio. Zamiast tego użyj obiektu global $wpdb
!
WordPress udostępnia globalną zmienną obiektową, $wpdb
, która jest instancją klasy wpdb zdefiniowanej w /wp-includes/wp-db.php. Domyślnie instancja $wpdb
jest tworzona, aby rozmawiać z bazą danych WordPress. Aby uzyskać dostęp do $wpdb
w kodzie PHP WordPress, zadeklaruj $wpdb
jako zmienną globalną za pomocą global keyword
lub użyj superglobal $GLOBALS
w następujący sposób:
// 1st Method - Declaring $wpdb as global and using it to execute an SQL query statement that returns a PHP objectglobal $wpdb;$results = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );// 2nd Method - Utilizing the $GLOBALS superglobal. Does not require global keyword ( but may not be best practice )$results = $GLOBALS->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );
obiekt $wpdb
nie jest ograniczony do domyślnych tabel utworzonych przez WordPress; może być używany do odczytu danych z dowolnej tabeli w bazie danych WordPress (takich jak niestandardowe tabele wtyczek). Na przykład, aby wybrać niektóre informacje z niestandardowej tabeli o nazwie „mytable”, możesz wykonać następujące czynności.
$myrows = $wpdb->get_results( "SELECT id, name FROM mytable" );
obiekt $wpdb
może rozmawiać z dowolną liczbą tabel, ale tylko z jedną bazą danych naraz; domyślnie baza danych WordPress. W rzadkich przypadkach, gdy musisz połączyć się z inną bazą danych, będziesz musiał utworzyć instancję własnego obiektu z klasy wpdb
z własnymi informacjami o połączeniu z bazą danych. W przypadku bardzo skomplikowanych konfiguracji z wieloma bazami danych rozważ użycie hyperdb.
Ostrzeżenie
niektóre funkcje tej klasy przyjmują polecenie SQL jako wejście. Aby zapobiec atakom SQL injection, musisz usunąć wszystkie niezaufane wartości włączone do zapytania SQL. Sprawdź dokumentację, aby sprawdzić, czy funkcja, której chcesz użyć escapes SQL, lub czy oczekuje, że zostanie wcześniej przygotowana jako escaped.
aby uzyskać więcej informacji na temat ucieczki SQL w WordPress, zobacz sekcję zatytułowaną Ochrona zapytań przed atakami SQL Injection poniżej.
Wybierz zmienną
funkcja get_var
zwraca pojedynczą zmienną z bazy danych. Chociaż zwracana jest tylko jedna zmienna, cały wynik zapytania jest buforowany do późniejszego wykorzystania. Zwraca NULL, jeśli nie znaleziono wyniku.
<?php $wpdb->get_var( 'query', column_offset, row_offset ); ?>
query (string) zapytanie, które chcesz uruchomić. Ustawienie tego parametru nanull
zwróci określoną zmienną z buforowanych wyników poprzedniego zapytania. column_offset (integer) żądana kolumna (0 jest pierwszą). Domyślnie 0. row_offset (integer) żądany wiersz (0 jest pierwszym). Domyślnie 0.
przykłady
<?php$user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->users" );echo "<p>User count is {$user_count}</p>";?>
Pobierz i wyświetl sumę niestandardowej wartości pola.
<?php// set the meta_key to the appropriate custom field meta key$meta_key = 'miles';$allmiles = $wpdb->get_var( $wpdb->prepare( "SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) );echo "<p>Total miles is {$allmiles}</p>";?>
wybierz wiersz
aby pobrać cały wiersz z zapytania, użyj get_row
. Funkcja może zwracać wiersz jako obiekt, tablicę asocjacyjną lub jako tablicę indeksowaną numerycznie. Jeśli zapytanie zwraca więcej niż jeden wiersz, funkcja zwraca tylko określony wiersz, ale wszystkie wiersze są buforowane do późniejszego użycia. Zwraca NULL jeśli nie znaleziono wyniku, rozważ to podczas używania zwracanej wartości w argumentach, patrz przykład poniżej.
<?php $wpdb->get_row('query', output_type, row_offset); ?>
query (string) zapytanie, które chcesz uruchomić. output_type jedna z trzech predefiniowanych stałych. Domyślnie obiekt.
- OBJECT-wynik zostanie wyświetlony jako obiekt.
- ARRAY_A-wynik zostanie wyświetlony jako tablica asocjacyjna.
- ARRAY_N-wynik zostanie wyświetlony jako tablica indeksowana numerycznie.
row_offset (integer) żądany wiersz (0 jest pierwszym). Domyślnie 0.
przykłady
Pobierz wszystkie informacje o linku 10.
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10" );
właściwościami obiektu $mylink
są nazwy kolumn wyniku z zapytania SQL (w tym przykładzie wszystkie kolumny z tabeli $wpdb->links
, ale można również wyszukać tylko określone kolumny).
echo $mylink->link_id; // prints "10"
natomiast użycie
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A );
spowoduje powstanie tablicy asocjacyjnej:
echo $mylink; // prints "10"
i
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_N );
spowoduje, że tablica numerycznie indeksowana:
echo $mylink; // prints "10"
jeśli w tabeli linków nie ma rekordu o ID 10, null
zostanie zwrócony. Następująca informacja byłaby wtedy fałszywa:
if ( null !== $mylink ) { // do something with the link return true;} else { // no link found return false;}
wybierz kolumnę
aby wybrać kolumnę, użyj opcji get_col
. Funkcja ta wyświetla tablicę jednowymiarową. Jeśli zapytanie zwraca więcej niż jedną kolumnę, tylko określona kolumna zostanie zwrócona przez funkcję, ale cały wynik jest buforowany do późniejszego użycia. Zwraca pustą tablicę, jeśli nie znaleziono wyniku.
<?php $wpdb->get_col( 'query', column_offset ); ?>
query (string) zapytanie, które chcesz wykonać. Ustawienie tego parametru nanull
zwróci podaną kolumnę z buforowanych wyników poprzedniego zapytania. column_offset (integer) żądana kolumna (0 jest pierwszą). Domyślnie 0.
przykłady
w tym przykładzie załóżmy, że blog poświęcony jest informacjom o samochodach. 1969 Ford Mustang), a do każdego stanowiska przypisane są trzy pola niestandardowe, producent, model i rok. Ten przykład wyświetli tytuły postów, filtrowane przez konkretnego producenta (Ford) i posortowane według modelu i roku.
formularz get_col klasy wpdb służy do zwrócenia tablicy wszystkich ID postów spełniających kryteria i posortowanych we właściwej kolejności. Następnie konstrukt foreach jest używany do iteracji przez tę tablicę identyfikatorów postów, wyświetlając tytuł każdego postu. Zauważ, że SQL dla tego przykładu został stworzony przez Andomar.
<?php $meta_key1= 'model';$meta_key2= 'year';$meta_key3= 'manufacturer';$meta_key3_value= 'Ford';$postids=$wpdb->get_col( $wpdb->prepare( "SELECT key3.post_idFROM $wpdb->postmeta key3INNER JOIN $wpdb->postmeta key1 ON key1.post_id = key3.post_id AND key1.meta_key = %s INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key3.post_id AND key2.meta_key = %sWHERE key3.meta_key = %s AND key3.meta_value = %sORDER BY key1.meta_value, key2.meta_value",$meta_key1, $meta_key2, $meta_key3, $meta_key3_value) ); if ( $postids ) {echo "List of {$meta_key3_value}(s), sorted by {$meta_key1}, {$meta_key2}";foreach ( $postids as $id ) { $post = get_post( intval( $id ) );setup_postdata( $post );?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php} }?>
ten przykład zawiera listę wszystkich postów zawierających określone pole niestandardowe, ale posortowanych według wartości drugiego pola niestandardowego.
<?php// List all posts with custom field Color, sorted by the value of custom field Display_Order// does not exclude any 'post_type'// assumes each post has just one custom field for Color, and one for Display_Order$meta_key1 = 'Color';$meta_key2 = 'Display_Order';$postids = $wpdb->get_col( $wpdb->prepare( "SELECT key1.post_idFROM $wpdb->postmeta key1INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key1.post_id AND key2.meta_key = %sWHERE key1.meta_key = %sORDER BY key2.meta_value+(0) ASC", $meta_key2,$meta_key1) ); if ( $postids ) {echo "List of {$meta_key1} posts, sorted by {$meta_key2}";foreach ( $postids as $id ) {$post = get_post( intval( $id ) );setup_postdata( $post );?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php}}?>
wybierz Ogólne wyniki
ogólne, wyniki wielu wierszy można pobrać z bazy danych za pomocą get_results
. Funkcja zwraca cały wynik zapytania jako tablicę. Każdy element tej tablicy odpowiada jednemu wierszowi wyniku zapytania i, podobnie jak get_row
, może być obiektem, tablicą asocjacyjną lub tablicą numerowaną. Jeśli nie znaleziono pasujących wierszy lub wystąpił błąd bazy danych, zwracana wartość będzie pustą tablicą. Jeśli łańcuch $query jest pusty lub przekazujesz nieprawidłowy $output_type, zostanie zwrócony NULL.
<?php $wpdb->get_results( 'query', output_type ); ?>
query (string) zapytanie, które chcesz uruchomić. output_type jedna z czterech predefiniowanych stałych. Domyślnie obiekt. Aby uzyskać więcej informacji, zobacz Wybór wiersza i jego przykłady.
- OBJECT – result będzie wyświetlany jako numerycznie indeksowana tablica obiektów wiersza.
- OBJECT_K-wynik będzie wyświetlany jako asocjacyjna tablica obiektów wiersza, przy użyciu wartości pierwszej kolumny jako kluczy (duplikaty będą odrzucane).
- array_a-result będzie wyświetlany jako numerycznie indeksowana tablica tablic asocjacyjnych, przy użyciu nazw kolumn jako kluczy.
- array_n – result będzie wyświetlany jako tablica indeksowana numerycznie tablic indeksowanych numerycznie.
ponieważ ta funkcja używa funkcji $wpdb->query() wszystkie zmienne klasy są poprawnie ustawione. Wyniki zliczane dla zapytania 'SELECT’ będą przechowywane w $wpdb->num_rows.
przykłady
Pobierz identyfikatory i tytuły wszystkich projektów przez Użytkownika 5 i echo tytułów.
$fivesdrafts = $wpdb->get_results( "SELECT ID, post_title FROM $wpdb->postsWHERE post_status = 'draft' AND post_author = 5");foreach ( $fivesdrafts as $fivesdraft ) {echo $fivesdraft->post_title;}
Uzyskaj wszystkie informacje o projektach użytkownika 5.
<?php$fivesdrafts = $wpdb->get_results( "SELECT * FROM $wpdb->postsWHERE post_status = 'draft' AND post_author = 5");if ( $fivesdrafts ){foreach ( $fivesdrafts as $post ){setup_postdata( $post );?><h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permalink: <?php the_title(); ?>"><?php the_title(); ?></a></h2><?php}}else{?><h2>Not Found</h2><?php}?>
Wstaw wiersz
Wstaw wiersz do tabeli.
<?php $wpdb->insert( $table, $data, $format ); ?>
table (string) nazwa tabeli, do której należy wstawić dane. data (array) dane do wstawienia(w kolumnie = > pary wartości). Zarówno kolumny $data, jak i wartości $ data powinny być „surowe” (nie powinny być też Escape SQL). format (array / string) (opcjonalne) tablica formatów do odwzorowania na każdą z wartości w $data. Jeżeli ciąg znaków, to ten format będzie użyty dla wszystkich wartości w $data. Jeśli zostanie pominięte, wszystkie wartości w $data będą traktowane jako ciągi znaków, chyba że w wpdb::$field_types podano inaczej.
Możliwe wartości formatu: %s jako string; % d jako integer( liczba całkowita); i %f jako float. (Patrz poniżej, aby uzyskać więcej informacji.)
po wstawieniu ID wygenerowanego dla kolumny AUTO_INCREMENT można uzyskać za pomocą:
$wpdb->insert_id
funkcja zwraca false, jeśli wiersz nie może zostać wstawiony. W przeciwnym razie zwraca liczbę dotkniętych wierszy (która zawsze będzie równa 1).
Uwaga: część wartości kolumny parametru data = >pary wartości muszą być skalarne. Jeśli przekażesz tablicę (lub obiekt) jako wartość do wstawienia, wygenerujesz ostrzeżenie podobne do „mysql_real_escape_string () expects parametr 1 to string, array given on line 880 in file /var/www/html/wp-includes/wp-db.php”.
przykłady
Wstaw dwie kolumny w wierszu, pierwsza wartość jest ciągiem znaków, a druga liczbą:
$wpdb->insert( 'table', array( 'column1' => 'value1', 'column2' => 123 ), array( '%s', '%d' ) );
zastąp wiersz
Zastąp wiersz w tabeli, jeśli istnieje, lub wstaw nowy wiersz w tabeli, jeśli wiersz jeszcze nie istniał.
<?php $wpdb->replace( $table, $data, $format ); ?>
table (string) nazwa tabeli do zastąpienia danych. data (tablica) dane do zastąpienia (w kolumnie = > pary wartości). Zarówno kolumny $data, jak i wartości $ data powinny być „surowe” (nie powinny być też Escape SQL). format (array / string) (opcjonalne) tablica formatów, które mają być odwzorowane na każdą z wartości w $data. Jeżeli ciąg znaków, to ten format będzie użyty dla wszystkich wartości w $data. Jeśli zostanie pominięte, wszystkie wartości w $data będą traktowane jako ciągi znaków, chyba że w wpdb::$field_types podano inaczej.
Możliwe wartości formatu: %s jako string; % d jako integer( liczba całkowita); i %f jako float. (Patrz poniżej, aby uzyskać więcej informacji.)
jeśli długość elementu string w parametrze $data array jest dłuższa niż długość określona w tabeli bazy danych MySql, wstawienie nie powiedzie się, funkcja zwróci false, ale $wpdb->last_error nie zostanie ustawiona na opisową wiadomość. Musisz upewnić się, że dane, które chcesz wstawić, zmieszczą się w bazie danych – nie zakładaj, że MySql skróci dane.
po zastąpieniu, ID wygenerowane dla kolumny AUTO_INCREMENT można uzyskać za pomocą:
$wpdb->insert_id
funkcja ta zwraca licznik wskazujący liczbę wierszy, których to dotyczy. Jest to suma wierszy usuniętych i wstawionych. Jeśli liczba jest równa 1 dla zastąpienia jednego wiersza, wstawiono wiersz i nie usunięto wierszy. Jeśli liczba jest większa niż 1, przed wstawieniem nowego wiersza usunięto jeden lub więcej starych wierszy. Pojedynczy wiersz może zastąpić więcej niż jeden stary wiersz, jeśli tabela zawiera wiele unikalnych indeksów, a nowy wiersz duplikuje wartości dla różnych starych wierszy w różnych unikalnych indeksach.
ta funkcja zwraca false, jeśli nie można zastąpić istniejącego wiersza i nie można wstawić nowego wiersza.
przykłady
Zastąp wiersz, pierwszą wartością jest id wiersza, drugą ciąg a trzecią liczba:
$wpdb->replace( 'table', array( 'indexed_id' => 1,'column1' => 'value1', 'column2' => 123 ), array( '%d','%s', '%d' ) );
zaktualizuj wiersze
zaktualizuj wiersz w tabeli. Zwraca false w przypadku błędów lub liczbę wierszy, których to dotyczy, jeśli się powiedzie.
<?php $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); ?>
table (string) nazwa tabeli do aktualizacji. data (array) dane do aktualizacji (w kolumnie = > pary wartości). Zarówno kolumny $data, jak i wartości $ data powinny być „surowe” (nie powinny być też Escape SQL). Oznacza to, że jeśli używasz danych GET lub POST, może być konieczne użycie stripslashes (), aby uniknąć ukośników kończących się w bazie danych. where (array) nazwana tablica klauzul WHERE (w kolumnie = > pary wartości). Wiele klauzul zostanie połączonych z ANDs. Zarówno $where kolumny, jak i $where wartości powinny być „surowe”. format (array / string) (opcjonalne) tablica formatów do odwzorowania na każdą z wartości w $data. Jeżeli ciąg znaków, to ten format będzie użyty dla wszystkich wartości w $data. where_format (array / string) (opcjonalne) tablica formatów, które mają być odwzorowane na każdą z wartości w $where. Jeśli ciąg znaków, ten format będzie używany dla wszystkich elementów w $where.
Możliwe wartości formatu: %s jako ciąg znaków; % d jako liczba całkowita i % f jako Liczba zmiennoprzecinkowa. (Patrz poniżej, aby uzyskać więcej informacji.) Jeśli zostanie pominięte, wszystkie wartości w $where będą traktowane jako ciągi znaków.
zwracane wartości: Ta funkcja zwraca liczbę zaktualizowanych wierszy lub false, jeśli wystąpił błąd. Należy pamiętać, że jeśli $data pasuje do tego, co jest już w bazie danych, żadne wiersze nie zostaną zaktualizowane, więc zostanie zwrócone 0. Z tego powodu powinieneś prawdopodobnie sprawdzić powrót za pomocą false = = = $result
Examples
Update a row, gdzie ID to 1, wartość w pierwszej kolumnie jest ciągiem znaków, a wartość w drugiej kolumnie jest liczbą:
$wpdb->update( 'table', array( 'column1' => 'value1',// string'column2' => 'value2'// integer (number) ), array( 'ID' => 1 ), array( '%s',// value1'%d'// value2), array( '%d' ) );
Uwaga: %d
nie radzi sobie z wartościami przecinków – jeśli nie używasz pełnych liczb, użyj string/%s.
Usuń wiersze
funkcja usuwania została dodana w WordPress 3.4.0 i może być używana do usuwania wierszy z tabeli. Użycie jest bardzo podobne do aktualizacji i wstawiania. Zwraca liczbę zaktualizowanych wierszy lub false w przypadku błędu.
<?php $wpdb->delete( $table, $where, $where_format = null ); ?>
parametry
$table (string) (wymagane) nazwa tabeli. Domyślnie: brak $where (array) (wymagane) nazwana tablica klauzul WHERE (w kolumnie – > pary wartości). Wiele klauzul zostanie połączonych z ANDs. Zarówno $where columns, jak i $where values powinny być 'raw’. Default: None $where_format (string/array) (opcjonalne) tablica formatów, które mają być odwzorowane na każdą z wartości w $where. Jeśli ciąg znaków, ten format będzie używany dla wszystkich elementów w $where. Format jest jednym z '% d’, '%f’, '%S ’ (integer, float, string; więcej informacji znajduje się poniżej). Jeśli zostanie pominięte, wszystkie wartości w $where będą traktowane jako ciągi znaków, chyba że w wpdb::$field_types podano inaczej. Domyślnie: null
przykłady
// Default usage.$wpdb->delete( 'table', array( 'ID' => 1 ) );// Using where formatting.$wpdb->delete( 'table', array( 'ID' => 1 ), array( '%d' ) );
uruchamianie zapytań ogólnych
funkcja query
umożliwia wykonanie dowolnego zapytania SQL w bazie danych WordPress. Jest najlepiej używany, gdy istnieje potrzeba konkretnych, niestandardowych lub w inny sposób złożonych zapytań SQL. Aby uzyskać więcej podstawowych zapytań, takich jak wybieranie informacji z tabeli, zobacz inne funkcje wpdb
powyżej, takie jak get_results, get_var, get_row or get_col
.
składnia Ogólna
<?php $wpdb->query('query'); ?>
query (string) zapytanie SQL, które chcesz wykonać.
ta funkcja zwraca wartość całkowitą wskazującą liczbę wierszy, których dotyczy/wybranych dla SELECT, INSERT, DELETE, UPDATE, itd. Dla instrukcji CREATE, ALTER, TRUNCATE i DROP SQL (które wpływają na całe tabele zamiast na konkretne wiersze) ta funkcja zwraca TRUE
po pomyślnym zakończeniu. Jeśli wystąpi błąd MySQL, funkcja zwróci FALSE
. Należy zauważyć, że ponieważ zarówno 0, jak i FALSE
mogą być zwracane dla zapytań wiersza, należy zachować ostrożność podczas sprawdzania zwracanej wartości. Użyj operatora tożsamości ( = = = ), aby sprawdzić, czy nie występują błędy (np. false = = = $result) i czy nie wpłynęły na nie jakiekolwiek wiersze (np. 0 = = = $result).
przykłady
Usuń meta klucz i wartość „płukania gardła” z Posta 13. (Dodamy metodę „prepare”, aby upewnić się, że nie mamy do czynienia z nielegalną operacją lub nielegalnymi postaciami):
$wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s", 13, 'gargle' ));
wykonane w WordPress przez delete_post_meta()
.
Ustaw rodzica strony 15 na stronę 7.
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %dWHERE ID = %dAND post_status = %s", 7, 15, 'static') );
Chroń zapytania przed atakami SQL Injection
aby uzyskać pełniejszy przegląd ucieczki SQL w WordPress, zobacz Sprawdzanie danych bazy danych. Jest to obowiązkowa lektura dla wszystkich autorów kodu WordPress i autorów wtyczek.
wszystkie dane w zapytaniach SQL muszą być zabezpieczone znakiem SQL przed wykonaniem zapytania SQL, aby zapobiec atakom SQL injection. Metoda prepare
wykonuje tę funkcjonalność dla WordPressa, który obsługuje zarówno składnię podobną do sprintf (), jak i vsprintf ().
Uwaga: Od 3.5, wpdb::prepare wymusza minimum 2 argumenty.
<?php $sql = $wpdb->prepare( 'query' , value_parameter ); ?>
query (string) zapytanie SQL, które chcesz wykonać, z symbolami zastępczymi (patrz poniżej). value_parameter (int|string / array) wartość do zastąpienia do elementu zastępczego. Wiele wartości można przekazać po prostu przekazując więcej argumentów w sposób podobny do metody sprintf (). Alternatywnie drugim argumentem może być tablica zawierająca wartości jak w funkcji VSPRINTF() PHP. Należy uważać, aby nie dopuścić do bezpośredniego wprowadzania przez użytkownika tego parametru, co umożliwiłoby manipulację tablicą dowolnego zapytania z wieloma symbolami zastępczymi. Wartości nie mogą być unikane przez SQL.
Placeholders
parametr zapytania prepare akceptuje placeholdery podobne do sprintf (). Obsługiwane są formaty %s (string), %d (integer) i %f (float). (Symbole zastępcze %S I %d były dostępne od czasu dodania funkcji do rdzenia w wersji 2.3, %f było dostępne tylko od wersji 3.3.) Wszelkie inne znaki %
mogą powodować błędy parsowania, chyba że są one znakami ucieczki. Wszystkie znaki %
wewnątrz literałów łańcuchów SQL, w tym takie symbole wieloznaczne, muszą być podwójnie znakowane jako %%
. Wszystkie % d, % f I %S należy pozostawić bez Cytowania w łańcuchu zapytania. Zauważ, że symbol zastępczy % d akceptuje tylko liczby całkowite, więc nie możesz przekazywać liczb, które mają wartości przecinków przez %d. jeśli potrzebujesz wartości przecinków, użyj %f jako float zamiast tego.
przykłady
Dodaj meta key => para wartości „Adages Harriet” => ” interfejs bazy danych WordPress jest jak Niedzielny poranek: łatwy.”do 10.
$metakey= "Harriet's Adages";$metavalue= "WordPress' database interface is like Sunday Morning: Easy.";$wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta( post_id, meta_key, meta_value )VALUES ( %d, %s, %s )", 10, $metakey, $metavalue ) );
wykonywane w WordPressie przez add_meta()
.
to samo zapytanie przy użyciu składni podobnej do vsprintf ().
$metakey = "Harriet's Adages";$metavalue = "WordPress' database interface is like Sunday Morning: Easy.";$wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta( post_id, meta_key, meta_value )VALUES ( %d, %s, %s )", array(10, $metakey, $metavalue) ) );
zauważ, że w tym przykładzie pakujemy wartości razem w tablicę. Może to być użyteczne, gdy nie znamy liczby argumentów, które musimy przekazać do czasu uruchomienia.
zauważ, że nie musisz się martwić o cytowanie ciągów. Zamiast przekazywać zmienne bezpośrednio do zapytania SQL, użyj symbolu zastępczego %s
dla łańcuchów, znacznika zastępczego %d
dla liczb całkowitych i %f jako symbolu zastępczego dla floatów. Możesz przekazać dowolną liczbę wartości, każda jako nowy parametr w metodzie prepare()
.
Pokaż I Ukryj błędy SQL
możesz włączać i wyłączać ECHA błędów odpowiednio za pomocą show_errors
i hide_errors
.
<?php $wpdb->show_errors(); ?>
<?php $wpdb->hide_errors(); ?>
możesz również wydrukować błąd (jeśli występuje) wygenerowany przez ostatnie zapytanie za pomocą print_error
.
<?php $wpdb->print_error(); ?>
Uwaga: Jeśli używasz WordPress Multisite, musisz zdefiniować stałą DIEONDBERROR dla błędów bazy danych, aby wyświetlić w ten sposób: <?php define( 'DIEONDBERROR', true ); ?>
pobieranie informacji o kolumnach
informacje o kolumnach ostatniego wyniku zapytania można pobrać za pomocą get_col_info
. Może to być użyteczne, gdy funkcja zwraca obiekt, którego właściwości nie są znane. Funkcja wyprowadzi żądane informacje z podanej kolumny lub tablicę z informacjami o wszystkich kolumnach z wyniku zapytania, jeśli nie podano kolumny.
<?php $wpdb->get_col_info('type', offset); ?>
wpisz (string) jakie informacje chcesz pobrać. Może przyjmować jedną z następujących wartości (lista pobrana z dokumentów ezSQL). Domyślnie nazwa.
- name-Nazwa kolumny. Domyślne.
- table – nazwa tabeli do której należy kolumna
- max_length – maksymalna długość kolumny
- not_null – 1 jeśli kolumna nie może być NULL
- primary_key – 1 jeśli kolumna jest kluczem podstawowym
- unique_key – 1 jeśli kolumna jest kluczem unikalnym
- numeric-1 jeśli kolumna jest numeric
- Blob – 1 jeśli kolumna jest Blob
- type – typ kolumny
- unsigned – 1 jeśli kolumna jest unsigned
- zerofill – 1 jeśli kolumna jest zero – filled
multiple_key – 1 jeśli kolumna jest kluczem nie unikalnym
offset (integer) określa kolumnę, z której ma być pobierana informacja (przy czym 0 jest pierwszą kolumną). Domyślnie -1.
- -1-pobiera informacje ze wszystkich kolumn. Wyjście jako tablica. Domyślne.
- Non-negative integer – pobiera informacje z podanej kolumny (0 jest pierwszą).
Czyszczenie pamięci podręcznej
możesz wyczyścić pamięć podręczną wyniku SQL za pomocą flush
.
<?php $wpdb->flush(); ?>
to usuwa $wpdb->last_result
, $wpdb->last_query
i $wpdb->col_info
.
zmienne klasy
$show_errors niezależnie od tego, czy echoing błędu jest włączony. Domyślnie TRUE. $num_queries liczba zapytań, które zostały wykonane. $last_query Ostatnie zapytanie do wykonania. $last_error ostatni tekst błędu wygenerowany przez MySQL. $ queries możesz zapisać wszystkie zapytania uruchomione w bazie danych i ich czasy zatrzymania ustawiając stałą SAVEQUERIES na TRUE (ta stała domyślnie na FALSE). Jeśli SAVEQUERIES jest prawdą, Twoje zapytania będą przechowywane w tej zmiennej jako tablica. $last_result najnowsze wyniki zapytań. $col_info informacje o kolumnie dla najnowszych wyników zapytania. Zobacz Pobieranie Informacji O Kolumnach. $insert_id ID wygenerowane dla kolumny AUTO_INCREMENT przez ostatnie zapytanie INSERT. $num_rows liczba wierszy zwróconych przez ostatnie zapytanie. $ prefix przypisany prefiks tabeli WordPress dla witryny. $base_prefix oryginalny prefiks zdefiniowany w wp-config.php. Dla wielu witryn: użyj, jeśli chcesz uzyskać prefiks bez dołączonego numeru bloga.
zmienne dla wielu witryn
jeśli używasz wielu witryn, masz również dostęp do następujących informacji:
$blogid identyfikator bieżącej witryny (blog). $siteid id bieżącej sieci (dawniej „site”). WordPress obecnie obsługuje tylko jedną sieć na instalację wielu witryn, ale to może się zmienić w przyszłości. Zobacz następujące informacje:
- WordPress: różnica między site_id a blog_id?
- http://stackoverflow.com/a/4189358/1924128 – kolejna dobra odpowiedź na to samo pytanie.
tabele
tabele bazy danych WordPress są łatwo odwoływane do klasy wpdb
.
$posts tabela postów. $postmeta tabela zawartości Meta (czyli Pola niestandardowe). $comments tabela komentarzy. $commentmeta tabela zawiera dodatkowe informacje o komentarzach. $termmeta tabela termmeta zawiera wartości term meta. $terms tabela terms zawiera 'opis’ kategorii, kategorii linków, tagów. $term_taxonomy tabela term_taxonomy opisuje różne taksonomie (klasy pojęć). Kategorie, kategorie linków i Tagi to taksonomie. $term_relationships tabela relacji term zawiera łącze pomiędzy termem a obiektem, który używa tego terminu, co oznacza, że ten plik wskazuje na każdą kategorię używaną dla każdego postu. $users tabela użytkowników. $usermeta tabela usermeta zawiera dodatkowe informacje o użytkowniku, takie jak pseudonimy, opisy i uprawnienia. $links tabela linków. $options tabela opcji.
tabele wielostanowiskowe
tabele te są używane tylko w instalacjach wielostanowiskowych.
$blogi tabela blogi zawiera listę oddzielnych blogów(witryn), które zostały utworzone w sieci (sieciach). $rejestracje tabela rejestracje. $site tabela Site zawiera listę sieci (wcześniej znanych jako „witryny” w WPMU), które są skonfigurowane w instalacji (zwykle jest tylko jedna strona wymieniona w tej tabeli). $sitemeta tabela opcji sieciowych (Site Meta) zawiera wszystkie opcje, które mają zastosowanie do całej instalacji wielostanowiskowej. $sitecategories tabela kategorii stron. $registration_log tabela dziennika rejestracji. $blog_versions tabela wersji bloga.
plik źródłowy
wpdb() znajduje się w wp-includes/wp-db.php
.
powiązane
- funkcja Member: wpdb::esc_like() – Escape LIKE statements before use in SQL.
Artykuły
- artykuł: pętla – podstawowy przegląd wykorzystania zapytania w pętli WordPress.
- artykuł: Przegląd zapytań-Wyjaśnienie, jak określić, które zapytania generują WordPress.
- artykuł: dostosowywanie zapytań za pomocą Hooka
- artykuł: wyświetlanie artykułów zapytanie MYSQL za pomocą niestandardowego
- artykuł: Tworzenie zaawansowanych zapytań na temat taksonomii
- artykuł: Tworzenie niestandardowych zapytań za pomocą przesunięcia i paginacji
dokumentacja kodu
- Klasa: wp_query – szczegółowy przegląd klasy wp_query
- Class: Wp_comment_query – class for comment-related queries
- class: wp_user_query – class for user-related queries
- object: $wpdb – przegląd użycia obiektu $wpdb
- Function: set_query_var()
- Function: get_query_var()
- Function: query_posts() – Create additional custom query
- Function: get_post() – Take A ID elementu i return the records in the database for this article
- funkcja: get_posts() – wyspecjalizowana funkcja zwracająca tablicę pozycji
- funkcja: get_pages() – wyspecjalizowana funkcja zwracająca tablicę stron
- funkcja: have_posts() – warunek, który określa, czy zapytanie zwróciło artykuł
- funkcja: the_post() – służy do automatycznego ustawiania pętli po zapytaniu
- funkcja: rewind_posts() – czyści bieżącą pętlę
- funkcja: setup_postdata() – Ustawia dane dla pojedynczego wyniku zapytania w pętli
- funkcja: wp_reset_postdata() – przywraca poprzednie zapytanie (zwykle po pętli w innej pętli)
- funkcja: wp_reset_query()
- funkcja: is_main_query() – zapewnia, że zmieniane zapytanie jest tylko głównym zapytaniem
- Action Hook: pre_get_posts – Zmień zapytania WordPress przed ich wykonaniem
- Action Hook: the_post – zmodyfikuj obiekt post po zapytaniu
- Filter Hook: found_posts – zmienia wartość obiektu found_posts WP_Query