wpdb::get_results()
Получает все данные указанного запроса (все строки и колонки). Результат возвращается в виде массива. Каждый элемент массива это объект с данными отдельной строки таблицы.
Метод класса: wpdb{}
Хуков нет.
Возвращает
Массив|Объект|null
. Результат запроса к базе данных. Вернет:
Массив объектов
— когда $output = OBJECT или OBJECT_K.Массив массивов
— когда $output = ARRAY_A или ARRAY_N.array()
— когда строк по запросу не найдено или ошибка запроса.NULL
— когда запрос пустая строка или передан неправильный тип вывода ($output_type).
Использование
global $wpdb; $wpdb->get_results( $query, $output );
- $query(строка)
Запрос который нужно выполнить.
Можно установить этот параметр в значение null, тогда функция вернет результат последнего запроса, который был произведен.
По умолчанию: null
- $output(константа/строка)
Флаг указывающий в каком виде нужно вернуть данные. Возможны 4 варианта:
OBJECT
— вернет массив объектов с числовыми ключами - элементы массива будут объекты строк таблицы —[ 0 => object ]
.OBJECT_K
— похож на предыдущий, только в индексах главного массива будут значения первой колонки результата запроса —[ 'field' => object ]
.
Обратите внимание, если в индекс будут попадать одинаковые значения, то данные будут затираться.ARRAY_N
— вернет индексный массив, каждый элемент которого будет так же индексным массивом —[ 0 => [...] ]
.ARRAY_A
— вернет индексный массив, каждый элемент которого будет ассоциативным массивом, в котором ключом будет название колонки —[ 'field' => [...] ]
.
По умолчанию: OBJECT
Примеры
#1 Выведем на экран ссылки на черновики автора с ID = 5
<?php $fivesdrafts = $wpdb->get_results( "SELECT * FROM $wpdb->posts WHERE 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="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></h2> <?php } else : ?> <h2> Не найдено</h2> <?php endif; ?>
#2 Получим ID и заголовки черновиков, ID автора которых равен 5 и выведем на экран заголовки постов.
$fivesdrafts = $wpdb->get_results( "SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'draft' AND post_author = 5" ); foreach ( $fivesdrafts as $fivesdraft ) { echo $fivesdraft->post_title; }
#3 Пример сложного запроса с GROUP BY (отзывов в WooCommerce)
/** * Возвращает результаты рейтинга (отзывов в WooCommerce) сгрупированный по оценкам * * @param int $post_id идентификатор поста * * @return array массив объектов, где каждый объект - сгрупированные данные по одной из оценок */ function get_cnt_rating_reviews_one_product( $post_id ){ global $wpdb; return $wpdb->get_results( $wpdb->prepare( " SELECT COUNT(meta.meta_id) as num, meta.meta_value FROM $wpdb->comments as comments INNER JOIN $wpdb->commentmeta as meta ON comments.comment_ID = meta.comment_id WHERE comments.comment_post_ID = %d AND meta_key = 'rating' GROUP BY meta.meta_value; ", $post_id ) ); } // использование get_cnt_rating_reviews_one_product( 4350 );
#4 Обработка ошибок
Вот как можно перехватывать ошибки из get_results():
global $wpdb; $result = $wpdb->get_results( "SELECT * FROM invalid query" ); if ( $wpdb->last_error ) { echo 'wpdb error: ' . $wpdb->last_error; }
Список изменений
С версии 0.71 | Введена. |