$wpdb->get_row() returnează doar un singur rând?

8 apr. 2011, 06:42:01
Vizualizări: 196K
Voturi: 39

De ce se întâmplă asta? Am încercat aceeași interogare în consolă și a returnat mai multe rânduri. Iată interogarea:

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

Continuă să returneze același rând unic când există mai mulți utilizatori activi. Am omis ceva?

1
Comentarii

Se numește get_row() pentru un motiv...

Ciprian Ciprian
17 aug. 2021 12:53:06
Toate răspunsurile la întrebare 4
1
66

Într-adevăr, folosește get_row() doar atunci când te aștepți să obții un singur rezultat, altfel poți utiliza get_results()

8 apr. 2011 06:52:38
3
58

Există trei metode de a extrage date din baza de date.

1. $wpdb->get_var: folosește această metodă pentru a obține o singură valoare din tabela bazei de date. De exemplu, dacă dorești să numeri totalul de comentarii. Poți face asta în felul următor:

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

2. $wpdb->get_row: Pentru a prelua un întreg rând din tabelă poți folosi această metodă.

Exemplu:

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

SAU

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

Folosind parametrul ARRAY_A în get_row, datele postării vor fi returnate ca un array asociativ. Alternativ, poți folosi parametrul ARRAY_N pentru a returna datele postării ca un array indexat numeric.

3. $wpdb->get_results: Interogările standard SELECT ar trebui să folosească funcția get_results pentru a prelua mai multe rânduri de date din baza de date.

<?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 vei avea nevoie de ultima metodă, după cum probabil îți dai seama.

8 apr. 2011 10:00:57
Comentarii

Exemple minunate de detalii..

pixelngrain pixelngrain
27 ian. 2013 19:31:10

Sigur! de ce nu..

pixelngrain pixelngrain
28 ian. 2013 18:45:23

Exemple foarte bune. Pentru optimizarea vitezei în ultimul exemplu aș recomanda să schimbați asta: ($allposts as $singlepost) cu: ($allposts as $k => $singlepost)

Cyborg Cyborg
30 dec. 2020 04:39:40
0
$wpdb->get_row('query', output_type, row_offset);

row_offset (integer) Rândul dorit (0 fiind primul). Implicit este 0.

vezi http://codex.wordpress.org/Class_Reference/wpdb

1 sept. 2011 18:57:24
2

soluția mea este simplă..

<?php
function count_results() {
    # folosește baza de date
    global $wpdb;

    # Interogare pentru a număra toate rezultatele dintr-un tabel
    $sql_count_results = '
        SELECT count(*) as count
        FROM `YOUR_TABLE`;';

    # Execută funcția
    $results = $wpdb->get_row( $sql_count_results , OBJECT );

    # Returnează rezultatele
    return $results->count;
}

Utilizare:

<?php
echo count_results();
16 nov. 2016 11:05:10
Comentarii

Ar fi minunat dacă ai putea explica și ce face acest cod, pe lângă a-l posta.

bravokeyl bravokeyl
16 nov. 2016 11:21:11

Acesta numără rândurile dintr-un tabel, nu este un răspuns la întrebarea OP.

alexg alexg
16 ian. 2019 00:02:34