$ wpdb-> get_row () zwraca tylko jeden wiersz?

21

Dlaczego tak jest Próbowałem tego samego zapytania w konsoli i zwróciło wiele wierszy. Oto zapytanie:

$this->wpdb->get_row("SELECT * FROM ".$this->wpdb->users." WHERE status = 'active'", ARRAY_A);

Zwraca ten sam pojedynczy wiersz, gdy jest kilku aktywnych użytkowników. Czy coś brakuje?

Joann
źródło

Odpowiedzi:

38

Rzeczywiście, używaj get_row()tylko wtedy, gdy spodziewasz się jednego wyniku, w przeciwnym razie możesz użyćget_results()

Javier Villanueva
źródło
2
W
celach
41

Istnieją trzy sposoby pobierania danych z bazy danych.

1 $wpdb->get_var.: użyj tego, aby uzyskać pojedynczą wartość z tabeli bazy danych. Na przykład, jeśli chcesz policzyć całkowitą liczbę komentarzy. Możesz to zrobić w następujący sposób:

<?php 
$comment_count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->comments;")); 
echo '<p>Total comments: ' . $comment_count . '</p>';
?>

2 $wpdb->get_row.: Aby pobrać cały wiersz tabeli, możesz użyć tego.

Przykład:

<?php 
$thepost = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = 1" ) );
echo $thepost->post_title; 
?>

LUB

<?php 
$thepost = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = 1" ), ARRAY_A );
print_r ($thepost); 
?>

Za pomocą ARRAY_Aparametru w get_row dane postu są zwracane jako tablica asocjacyjna. Alternatywnie można użyć tego ARRAY_Nparametru, aby zwrócić dane postu w tablicy indeksowanej numerycznie.

3 $wpdb->get_results.: Standardowe SELECTzapytania powinny używać funkcji get_results do pobierania wielu wierszy danych z bazy danych.

<?php 
global $wpdb;
$allposts = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish'") );
foreach ($allposts as $singlepost) { 
         echo '<p>' .$singlepost->post_title. '</p>';
}
?>

i potrzebujesz tego ostatniego, jak możesz się spodziewać.

enam
źródło
1
Cudowne szczegółowe przykłady ..
pixelngrain
Pewnie! dlaczego nie ..
pixelngrain 28.01.2013
0

moje rozwiązanie jest proste ..

<?php
function count_results() {
    # use the data base
    global $wpdb;

    # Query to count all results from one table
    $sql_count_results = '
        SELECT count(*) as count
        FROM `YOUR_TABLE`;';

    # Ejecute function
    $results = $wpdb->get_row( $sql_count_results , OBJECT );

    # Return results
    return $results->count;
}

Posługiwać się:

<?php
echo count_results();
Bryan Contreras
źródło
4
Byłoby wspaniale, gdybyś mógł wyjaśnić, co ten kod robi oprócz dodania go.
bravokeyl
To zlicza wiersze w tabeli, nie jest to odpowiedź na pytanie PO.
alexg