web-dev-qa-db-ja.com

$ wpdb-> get_row()は単一行のみを返しますか?

それはなぜです?コンソールで同じクエリを試したところ、複数の行が返されました。これがクエリです:

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

アクティブなユーザーが複数いる場合、同じ単一行を返し続けます。私は何かが足りないのですか?

21
Joann

確かに、get_row()は1つの結果が得られると期待される場合にのみ使用してください。それ以外の場合はget_results()を使用できます。

35

データベースからデータを取得する方法は3つあります。

1 .$wpdb->get_var:データベーステーブルから単一の値を取得するためにこれを使います。あなたがコメントの総数を数えたい場合のように。あなたは以下の方法でそれをすることができます:

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

2 .$wpdb->get_row:テーブル行全体を取得するにはこれを使うことができます。

例:

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

OR

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

Get_rowでARRAY_Aパラメータを使用することで、投稿データは連想配列として返されます。あるいは、ARRAY_Nパラメータを使用して、投稿データを数値インデックス配列で返すこともできます。

3 .$wpdb->get_results:標準のSELECTクエリは、データベースから複数行のデータを取得するためにget_results関数を使用するべきです。

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

そしてあなたが期待できるように、あなたは最後のものが必要です。

39
enam
$wpdb->get_row('query', output_type, row_offset);

row_offset(integer)目的の行(0が最初の行)です。デフォルトは0です。

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

1
test

私の解決策は簡単です。

<?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;
}

つかいます:

<?php
echo count_results();
0
Bryan Contreras