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 | Введена. |