WordPress Essentials: взаимодействия с базой данных WordPress

Пока вы уже используют многие функции в WordPress для взаимодействия с базой данных, есть простой и безопасный способ сделать это напрямую, используя $wpdb класса.

Построенный на большой ezSQL class Джастин Винсент, $wpdb позволяет обратиться запросы к любым таблицы в базе данных, и это также поможет вам справиться с возвращаемые данные.Потому что эта функциональность встроена в WordPress, нет необходимости открывать отдельное подключение к базе данных (в этом случае, вам будет дублировать код), и нет необходимости выполнять хаки, такие как изменение результирующего набора после его запроса.

$wpdb class $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 ()

Всякий раз, когда вы вставляете что-т …

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.