Блог веб-разработчика: в помощь программистам

WordPress – работа с базой

Вордпресс предоставляет достаточно обширные возможности для работы с его базой.

Описание всех классов есть в файле wp-includes/wp-db.php. Данные классы позволяют писать плагины, которые будут работать максимально безопасно без нарушения функционала всей системы.

Рассмотрим наиболее часто используемые.

Основные функции

  • 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) – получает одиночную колонку из базы данных в формате массива.

Приведу примеры работы как рекомендуют разработчики WP

/**
* 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" );

You can follow any responses to this entry through the RSS 2.0 feed.