Пока вы уже используют многие функции в WordPress для взаимодействия с базой данных, есть простой и безопасный способ сделать это напрямую, используя $wpdb
класса.
Построенный на большой ezSQL class Джастин Винсент, $wpdb
позволяет обратиться запросы к любым таблицы в базе данных, и это также поможет вам справиться с возвращаемые данные.Потому что эта функциональность встроена в WordPress, нет необходимости открывать отдельное подключение к базе данных (в этом случае, вам будет дублировать код), и нет необходимости выполнять хаки, такие как изменение результирующего набора после его запроса.
$wpdb
класса modularizes и автоматизирует многие связанные с базой данных tasks.
В этой статье я покажу вам, как начать работу с $wpdb
класса, как извлечь данные из базы данных WordPress и как запускать более сложные запросы, обновлять или удалять что-то в базу данных.Методы здесь будет удалить некоторые из трудностей, с которыми вы столкнетесь с такими функциями, как get_posts()
и wp_list_categories()
, позволяет адаптировать запросы для ваших конкретных потребностей.Этот метод также может сделать ваш сайт более эффективным, получая только те данные, что вам нужно — ни больше, ни less.
Как Started
Если вы знаете, как MySQL или аналогичной работы языках, то вы будете как дома с этим классом, и вам нужно будет держать лишь небольшое число имен функций в виду.Основные использование этого класса можно лучше всего понять на примере, поэтому давайте запрос базе данных идентификаторов и названий четырех последних сообщений, по распоряжению количество комментариев (в порядке убывания)
<?php $posts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type='post' ORDER BY comment_count DESC LIMIT 0,4") ?>
Как вы можете видеть, это является одним из основных запросов SQL, с некоторыми PHP обернутые вокруг него.$wpdb
класс содержит метод (метод специального названия для функций, которые находятся внутри классов), с именем get_results()
, который будет не только получить ваши результаты, но поместить их в удобный объект.Вы, возможно, заметили, что, вместо wp_posts
по названию таблицы, я использовал $wpdb->posts
, который является вспомогательным для доступа к основным WordPress таблиц.О том, зачем использовать эти later.
$results
Объект в настоящее время содержит данные в следующем формате:
Array ( [0] => stdClass Object ( [ID] => 6 [post_title] => The Male Angler Fish Gets Completely Screwed ) [1] => stdClass Object ( [ID] => 25 [post_title] => 10 Truly Amazing Icon Sets From Germany ) [2] => stdClass Object ( [ID] => 37 [post_title] => Elderberry Is Awesome ) [3] => stdClass Object ( [ID] => 60 [post_title] => Gathering Resources and Inspiration With Evernote ) )
Получение результатов от Database
Если вы хотите получить некоторую информацию из базы данных, вы можете использовать один из четырех вспомогательных функций для структурирования data.
Get_results ()
Это функция, которую мы рассмотрели ранее.Лучше всего, когда вам нужно двумерных данных (несколько строк и столбцов).Он преобразует данные в массив, который содержит отдельные объекты для каждого row.
<?php $posts = $wpdb->get_results("SELECT ID, post_title FROM wp_posts WHERE post_status = 'future' AND post_type='post' ORDER BY post_date ASC LIMIT 0,4") // Echo the title of the first scheduled post echo $posts[0]->post_title; ?>
Get_row
Когда вам нужно найти толькоодной конкретной строки в базе данных (например, сообщение с самых комментарии), вы можете использовать get_row()
.Он тянет данные в одномерном object.
<?php $posts = $wpdb->get_row("SELECT ID, post_title FROM wp_posts WHERE post_status = 'publish' AND post_type='post' ORDER BY comment_count DESC LIMIT 0,1") // Echo the title of the most commented post echo $posts->post_title; ?>
Get_col
Этот метод так же, как get_row()
, но вместо того, чтобы захватить один ряд результатов, он получает одну колонку.Это полезно, если вы хотите, чтобы получить идентификаторы только 10 самых комментируемых постов.Как и get_row()
, он сохраняет свои результаты в одномерном object.
<?php $posts = $wpdb->get_col("SELECT ID FROM wp_posts WHERE post_status = 'publish' AND post_type='post' ORDER BY comment_count DESC LIMIT 0,10") // Echo the ID of the 4th most commented post echo $posts[3]->ID; ?>
Get_var
Во многих случаях, вам нужно только одно значение из базы данных, например, адреса электронной почты одного из ваших пользователей.В этом случае, вы можете использовать get_var
, чтобы извлечь его как простое значение.Тип данных значения будет таким же, как его тип в базе данных (например, целые будут целые числа, строки будут строк)
<?php $email = $wpdb->get_var("SELECT user_email FROM wp_users WHERE user_login = 'danielpataki' ") // Echo the user's email address echo $email; ?>
Вставки в Database
Для выполнения вставки, мы можем использовать метод вставки:
$wpdb->insert( $table, $data, $format);
Этот метод принимает три аргумента.Первый определяет имя таблицы, в которую вы вставляете данные.Вторым аргументом является массив, содержащий столбцы и соответствующие им значения, так как пар ключ-значение.Третий параметр указывает тип данных ваши ценности, в порядке, вы им дали.Вот пример:
<?php $wpdb->insert($wpdb->usermeta, array("user_id" => 1, "meta_key" => "awesome_factor", "meta_value" => 10), array("%d", %s", "%d")); // Equivalent to: // INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES (1, "awesome_factor", 10); ?>
Если вы привыкли писать ваши вставками, это может показаться на первый громоздким, но на самом деле дает вам большую гибкость, поскольку она использует массивы в качестве inputs.
Выбранный формат не является обязательным, все значения интерпретируются как строки по умолчанию, но это в том числе способ является хорошей практикой.Эти три значения можно использовать составляют %s
для струнных, %d
десятичных чисел и %f
для floats.
Обновление Data
В настоящее время, вы не будете удивлены, узнав, что у нас также есть вспомогательный метод для обновления наших данных — отвратительно, называется update()
.Его использование напоминает то, что мы видели выше, но справиться с where
пункт нашей обновление, оно нуждается в двух дополнительных parameters.
$wpdb->update( $table, $data, $where, $format = null, $where_format = null );
$table
$data
и $format
параметры должны быть вам знакомы, они такие же, как и раньше.Использование $where
параметр, мы можем определить условия обновления.Он должен быть массив в виде столбца значение пар.Если указать несколько параметров, то они будут соединены с AND
логика.$where_format
точно так же как $format
: она определяет формат значения в $where
parameter.
$wpdb->update( $wpdb->posts, array("post_title" => "Modified Post Title"), array("ID" => 5), array("%s"), array("%d") );
Другие Queries
В то время как помощники выше, большие, иногда выполняя различные или более сложные запросы, чем помощники позволяют это необходимо.Если Вам необходимо выполнить обновление с комплексом where
пункт, содержащий несколько AND
/ OR
логике, то вы не сможете использовать update()
метод.Если вы хотите сделать что-то вроде удаления строки или установить соединение множества символов, то вы должны использовать “общее” query()
метод, который позволяет вам выполнять какой-либо query.
$wpdb->query("DELETE FROM wp_usermeta WHERE meta_key = 'first_login' OR meta_key = 'security_key' ");
Защита Validation
Я надеюсь, что я не должен сказать вам, насколько важночтобы убедиться, что ваши данные в безопасности и что ваша база данных не может быть подделан!Проверка данных немного выходит за рамки данной статьи, но делать взглянуть на то, что WordPress Кодекс должен сказать о “ Data Validation” в некоторых point.
В дополнение к проверке, необходимо избежать всех запросов.Даже если вы не знакомы с SQL injection атак, до сих пор используют этот метод, а затем прочитать о его позже, потому что это critical.
Хорошей новостью является то, что при использовании любого из вспомогательных функций, то вам не нужно ничего делать: запрос бежал за вас.Если вы используете query()
метод, однако, вы должны будете уйти вручную, используя prepare()
method.
$sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] );
Чтобы сделать это немного более удобоваримый, давайте перепишем это основной формат bit.
$sql = $wpdb->prepare( "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value ) VALUES ( %d, %s, %d )", 3342, 'post_views', 2290 ) $wpdb->query($sql);
Как вы можете видеть, это не так страшно.Вместо добавления фактические значения, где вы обычно делаете, вы укажите тип данных, а затем добавить фактических данных в качестве последующего parameters.
Класс переменных и других Methods
Помимо этих прекрасных методов, есть довольно много других функций и переменных, чтобы сделать вашу жизнь проще.Я покажу вам некоторые из самых распространенных, но, пожалуйста, смотрите на странице WordPress Codex связано с выше полный список всего того, что $wpdb
должен offer.
Insert_id ()
Всякий раз, когда вы вставляете что-т …
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров