Как получить записи из базы данных в WordPress

3 дек. 2013 г., 15:38:21
Просмотры: 14K
Голосов: 0

index.php:

<?php 
// Получаем записи из таблицы wp_posts с заголовком 'Auto Draft'
$new = $wpdb->query("SELECT * FROM wp_posts WHERE post_title='Auto Draft'");
// Получаем первую строку результата (устаревший метод)
$new1 = mysql_fetch_row($new);
// Выводим первое поле из строки
echo $new1[0];
?>

Как получить записи из базы данных?
Как база данных взаимодействует с файлами WordPress?

0
Все ответы на вопрос 1
4

wpdb — это простая обёртка вокруг функций mysql_*, но их нельзя смешивать. $wpdb->query не возвращает ссылку на базу данных, которая нужна для mysql_fetch_row. Вместо этого...

...возвращается целое число, соответствующее количеству затронутых/выбранных строк. Если произошла ошибка MySQL, функция вернёт FALSE. (Примечание: поскольку могут быть возвращены как 0, так и FALSE, убедитесь, что используете правильный оператор сравнения: равенство == vs. идентичность ===).

Всё это можно прочитать в Codex.

Таким образом, $wpdb->query действительно предназначен для запросов, которые не возвращают данные, например, для удаления.

Вам нужно следующее:

$new = $wpdb->get_results("select * from wp_posts where post_title='Auto Draft'");

Также стоит использовать prepare, если вы работаете с пользовательскими данными.

$new = $wpdb->get_results($wpdb->prepare("select * from wp_posts where post_title=%s",$str));

Это вернёт объект, но вы можете передать второй параметр, чтобы получить массив. Вы можете перебирать этот объект или массив с помощью стандартных операций PHP для объектов/массивов.

Также существуют $wpdb->get_var и $wpdb->get_col.

База данных хранит динамический контент — записи, страницы, настраиваемые опции, таблицы категорий и т.д., как и в любом другом PHP/MySQL-приложении. Это не просто перечислимый список.

Что касается вопроса в комментарии: «В каком случае нам, скорее всего, нужно использовать это?» — без понятия. Всё зависит от того, что вы делаете. Это не имеет однозначного ответа, но в большинстве случаев вам не нужно (и не следует) писать SQL для работы с базой данных. Для этого существует множество встроенных функций — WP_Query, WP_User_Query, set_option, update_post_meta, wp_update_post, и этот список можно продолжать ещё около двадцати строк.

3 дек. 2013 г. 16:21:29
Комментарии

Очень мило с вашей стороны :) Какова роль базы данных? То есть, как использовать запросы к базе данных в WordPress и в каких случаях это чаще всего необходимо. Большое спасибо.

Tushar Sharma Tushar Sharma
4 дек. 2013 г. 06:45:39

@TusharSharma : Смотрите правки.

s_ha_dum s_ha_dum
4 дек. 2013 г. 17:23:06

@s_ha_dum не могли бы вы проверить следующие моменты. - Вы упомянули $wpdb->query is really for queries that don't return data, like a delete., но в случае delete-запроса $wpdb->query вернет количество затронутых записей. - Вы использовали $wpdb->results. Разве не должно быть $wpdb->get_results?

Chittaranjan Chittaranjan
13 дек. 2013 г. 08:51:11

Я имел в виду "возвращать данные из базы данных" — строки/значения из базы данных. Да, я считаю, что все методы возвращают некоторую информацию о выполнении запроса. Да, это get_results. Наверное, я писал второпях. :)

s_ha_dum s_ha_dum
13 дек. 2013 г. 16:35:03