$wpdb->get_row() возвращает только одну строку?

8 апр. 2011 г., 06:42:01
Просмотры: 196K
Голосов: 39

Почему так происходит? Я пробовал тот же запрос в консоли, и он возвращал несколько строк. Вот запрос:

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

Он продолжает возвращать одну и ту же строку, хотя есть несколько активных пользователей. Что я упускаю?

1
Комментарии

Он называется get_row() не просто так...

Ciprian Ciprian
17 авг. 2021 г. 12:53:06
Все ответы на вопрос 4
1
66

Действительно, используйте get_row() только тогда, когда ожидаете получить один результат. В противном случае можно использовать get_results().

8 апр. 2011 г. 06:52:38
Комментарии
3
58

Существует три способа получения данных из базы данных.

1. $wpdb->get_var: используйте этот метод для получения одного значения из таблицы базы данных. Например, если вам нужно подсчитать общее количество комментариев. Это можно сделать следующим образом:

<?php 
$comment_count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->comments;")); 
echo '<p>Всего комментариев: ' . $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; 
?>

ИЛИ

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

Используя параметр ARRAY_A в get_row, вы получите данные записи в виде ассоциативного массива. Альтернативно, можно использовать параметр 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>';
}
?>

И, как вы могли ожидать, вам понадобится последний метод.

8 апр. 2011 г. 10:00:57
Комментарии

Отличные примеры с деталями..

pixelngrain pixelngrain
27 янв. 2013 г. 19:31:10

Конечно! Почему бы и нет..

pixelngrain pixelngrain
28 янв. 2013 г. 18:45:23

Действительно отличные примеры. Для оптимизации скорости в последнем примере я бы рекомендовал изменить это: ($allposts as $singlepost) на: ($allposts as $k => $singlepost)

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

row_offset (целое число) Номер нужной строки (0 означает первую строку). По умолчанию 0.

Смотрите http://codex.wordpress.org/Class_Reference/wpdb

1 сент. 2011 г. 18:57:24
2

Моё решение простое..

<?php
function count_results() {
    # Используем базу данных
    global $wpdb;

    # Запрос для подсчёта всех результатов из таблицы
    $sql_count_results = '
        SELECT count(*) as count
        FROM `YOUR_TABLE`;';

    # Выполняем функцию
    $results = $wpdb->get_row( $sql_count_results , OBJECT );

    # Возвращаем результаты
    return $results->count;
}

Использование:

<?php
echo count_results();
16 нояб. 2016 г. 11:05:10
Комментарии

Было бы здорово, если бы вы также объяснили, что делает этот код, помимо его публикации.

bravokeyl bravokeyl
16 нояб. 2016 г. 11:21:11

Это подсчитывает строки в таблице, но не является ответом на вопрос автора.

alexg alexg
16 янв. 2019 г. 00:02:34