Skip to main content

Как выполнять SQL запросы WordPress с помощью класса wpdb

Как выполнять SQL запросы WordPress с помощью класса wpdb

Взаимодействие с базой данных в CMS WordPress осуществляется с помощью класса wpdb. Класс позволяет осуществлять различные операции с базой данных, такие как добавление, удаление, обновление и вывод данных.

Обращаться к базе данных необходимо через глобальную переменную $wpdb. Таким образом перед кодом переменная обязательно должна быть глобализированна:

global $wpdb;

После этого, с помощью готовых методов класса, можно управлять любыми таблицами в текущей базе данных WordPress, даже теми, которые вы создали вручную. Точно так же как если бы вы использовали для подключения PHP-функцию mysql_connect().

Например, можно выбрать все поля из произвольной таблицы mytable таким образом:

$mytable = $wpdb->get_results( "SELECT * FROM mytable" );

Основные методы класса wpdb

query — произвольный запрос к Базе Данных WordPress
get_var — получение определенной ячейки таблицы
get_row — выбор строки таблицы
get_col — выбор столбца таблицы
get_results — выбор нескольких строк таблицы
insert — вставка новой записи (строки) в таблицу
update — обновление записи (строки) в таблице
replace — замена строки
delete — удаление строки из таблицы
prepare — защита запроса от SQL инъекций
esc_like — очистка LIKE строки
show/hide/print_error — показать или спрятать ошибки SQL
get_col_info — получить информацию о колонке
flush — сброс кэша

Примеры использования

Вывод данных

Вывод количества пользователей:

$user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->users;" );
echo '<p>Количество пользователей равно: ' . $user_count . '</p>';

Вывести количество страниц:

function get_totalpages() {
	global $wpdb;
	$totalpages = intval( $wpdb->get_var(
		"SELECT COUNT(ID) FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish'"
	));

	return $totalpages;
}

Вывести количество комментариев:

function get_totalcomments() {
	global $wpdb;
	$totalcomments = intval( $wpdb->get_var(
		"SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = '1'"
	));

	return $totalcomments;
}

Вывести записи с доп.полем color:

$meta_key1 = 'Color';
$meta_key2 = 'Display_Order';

$postids = $wpdb->get_col($wpdb->prepare("
SELECT      key1.post_id
FROM        $wpdb->postmeta key1
INNER JOIN  $wpdb->postmeta key2
			on key2.post_id = key1.post_id
			and key2.meta_key = %s
WHERE       key1.meta_key = %s
ORDER BY    key2.meta_value+(0) ASC",
		 $meta_key2,$meta_key1)); 

if ($postids) {
  echo 'List of '. $meta_key1  . ' posts, sorted by ' . $meta_key2 ;
  foreach ($postids as $id) {
	$post=get_post(intval($id));
	setup_postdata($post);?>
	<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
	<?php
  }
}

Вывести названия всех страниц:

$pages = $wpdb->get_results( 
	"
	SELECT post_title, post_content 
	FROM $wpdb->posts
	WHERE post_status = 'publish' 
	AND post_type = 'page'
	"
);

if( $pages ) {
	foreach ( $pages as $page ) {
		echo $page->post_title;
	}
}
// Выводим заголовки

Вывести дату регистрации конкретного пользователя:

$date = $wpdb->get_var(
	"SELECT user_registered
	FROM $wpdb->users
	WHERE user_login = 'admin'"
);
echo $date;

Вывести пост с самым большим количеством комментариев:

$post = $wpdb->get_row(
	"
	SELECT post_title, post_content
	FROM $wpdb->posts
	WHERE post_status = 'publish'
	ORDER BY comment_count DESC LIMIT 0,1
	"
);
echo $post->title;

Добавление данных

Вставить значение в строку таблицы mytable:

$wpdb->insert(
	'mytable',
	array( 'column1' => 'Значение1', 'column2' => 'Значение2' ),
	array( '%s', '%s' )
);

В методе указывается формат строки. Если его не указать, то формат по умолчанию будет строчный.

%s — строка
%d — целое число
%f — дробное число

Обновление данных

Обновление строки c ID = 5 в таблице mytable:

$wpdb->update( 'mytable',
	array( 'column1' => 'Значение1', 'column2' => 'Значение2' ),
	array( 'ID' => 5 )
);

Удаление данных

Удалить строку из таблицы mytable c ID = 5:

$wpdb->delete( 'mytable', array( 'ID' => 5 ) );

Защита от SQL инъекций

$sql = $wpdb->prepare( "SELECT * FROM mytable WHERE id = %s", $var );
Похожие записи
Простая пагинация на PHP и MySQL

Это руководство о том, как сделать простое разбиение на страницы, используя PHP и MySQL с... Читать далее

Работа с MySQL в PHP

Как в PHP установить соединение с базой данных MySQL, вывести, добавить и удалить записи из... Читать далее

Перенос сайта на WordPress на другой домен

В повседневной работе часто приходится сталкиваться с переносом сайта на WordPress с локального или тестового... Читать далее

Что такое шорткод и как его использовать

Шорткоды - это PHP функции, которые можно вставлять в текст записи, страницы или другой таксономии... Читать далее

Contact Form 7 reCAPTCHA. Установка и настройка

Защитить от спама свои контактные формы на сайте WordPress, созданные в плагине Contact Form 7... Читать далее

Установка WordPress на Open Server

В этой статье подробно рассмотрим как установить CMS WordPress на локальный сервер Open Server. Установка... Читать далее

Добавить комментарий

*

code