WordPress. Функции базы данных

В wordpress существует достаточно обширный класс, предоставляющий набор методов для эффективной работы с базой данных. Вы можете найти описание этого класса а также всех его методов в файле /wp-includes/wp-db.php. В сегодняшней статье будут рассмотрены наиболее важные из этих методов, и небольшие примеры их использования. Важно умение использовать возможности класса $wpdb, для безопасной работы плагинов.

В статье будут приведены примеры использования следующих шести методов:

  • insert($table, $data, $format) – вставляет строку в таблицу через массивы.
  • update($table, $data, $where, $format, $where_format) – обновляет строку в таблице через массивы.
  • get_var($query, $x, $y) – получает одиночную переменную из базы данных.
  • query($query) — выполняет MySQL-запрос к базе данных, с текущим подключением.
  • get_results($query, $output) – получает данные SQL-запроса из базы данных (одну или множество строк).
  • escape($data) – Экранирует контент для вставки в базу данных, используя метод addslashes() для безопасности.

Кроме этого, есть еще несколько интересных методов:

  • set_prefix($prefix) – используется для установления префикса wordpress-таблиц, также может быть использован для переопределения префикса в любое время.
  • prepare($query) – безопасно подготавливает SQL-запрос к выполнению, с помощью sprint()-подобного синтаксиса.
  • get_row($query, $output, $y) – получает одиночную запись из базы данных.
  • get_col($query, $x) – получает одиночную колонку из базы данных в формате массива.
/**
 * insert
 */
$wpdb->insert( $wpdb->posts, array( 'post_title' => $mytitle ) );

$wpdb->insert( $wpdb->options, array(
            'option_name',
            'new_option_key',
            'option_value' => 'New Option Value',
            'autoload' => 'yes' )
            );

/**
 * update
 */
$wpdb->update( $wpdb->posts, array( 'post_title' => $mytitle ),
            array( 'ID' => $myid )
            );

$wpdb->update( $wpdb->options,
            array( 'option_value' => 'New Option Value' ),
            array( 'option_name' => 'new_option_value' )
            );

/**
 * get_var
 */
$post_id = $wpdb->get_var(
            $wpdb->prepare( "SELECT post_id FROM
                    $wpdb->postmeta WHERE
                    post_id = %d AND
                    meta_key = 'enclosure' AND
                    meta_value LIKE (%s)", $post_ID, $url . '&' )
            );

$content = $wpdb->get_var(
            $wpdb->prepare("SELECT post_content FROM " .
                    "$wpdb->posts WHERE " .
                    "post_title = %s AND " .
                    "ID = %d", $title, $id )
        );

/**
 * query
 */
$wpdb->query( "DELETE FROM $wpdb->options WHERE option_name = '$name'" );

$wpdb->query( "UPDATE $wpdb->posts SET post_title = '$mytitle' WHERE ID = $myid" );

/**
 * query and escape
 */
$mytitle = $wpdb->escape( $mytitle );
$myid    = absint( $myid );
$wpdb->query( "UPDATE $wpdb->posts SET post_title = '$mytitle' WHERE ID = $myid" );

/**
 * get_results
 */
$type = $wpdb->get_results( "SELECT post_type FROM " .
                "$wpdb->posts WHERE ID=$id" );

Перевод статьи “WordPress Database Functions”.

Комментарии: (8)

  1. [...] This post was mentioned on Twitter by Виталий Кулёв, dreamhelg. dreamhelg said: небольшая заметка о функциях для работы с БД в wordpress — http://dreamhelg.ru/2010/12/wordpress-database-functions/ [...]

  2. Коротко и ясно. Спасибо!
    Буквально пару дней назад хотел полностью описать класс wbdb.
    Теперь даже не знаю стоит ли :)

    • dreamhelg

      Стоит конечно, это ведь краткое описание, подробное никогда не помешает.

  3. Жуть какая…
    eta_value LIKE (%s)", $post_ID, $url . '&' Первый раз вижу чтоб так LIKE записывали. По идее что то вроде LIKE '%s' $url.'%'

    query( "DELETE FROM $wpdb->options WHERE option_name = '$name'" ) зачем так делать если есть prepare? А то сделают $name="' OR 1=1 --"

    Да и сам класс какой то жуткий

  4. Извините за возможно нубский вопрос, но всё же: для чего может понадобиться манипуляции с бд вообще? У меня, как рядового блогера, не возникало таких потребностей…

  5. Вордпрес хорошая система, но как не крути для продвижения она не годится

  6. webkontrast, движок вордпресс используют только для создания сателлитов. Пора бы уже знать ;)

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>