爲了便於訪問數據庫,WordPress提供了一個友好的數據庫操作類:wpdb,該類定義在/wp-includes/wp-db.php文件中。wpdb類封裝了所有的數據庫操作函數,它是基於開源的數據庫操作類ezSQL進行修改的,使其更適合於WordPress,也使其僅適用於mySQL數據庫。同時,WordPress還提供了一個全局變量$wpdb,並將其實例化爲wpdb類的對象。這樣我們就可以直接使用$wpdb來調用所有的數據庫操作函數。
通過這個$wpdb對象,我們可以對WordPress數據庫進行任何操作,包括建表、查詢、刪除、更新等。要注意的是,如果要在自定義函數中使用$wpdb,必須先將其全局化(global $wpdb;)。
下面就詳細介紹一下WordPress的數據庫操作函數:
1、function query($query)
這個函數是最基本的數據庫操作函數,$query爲SQL語句,提交給數據庫執行,結果分兩種情況:
1). 如果是“insert|delete|update|replace”, 返回受影響行數,在“insert|replace”這種情況下,該函數會用$this->insert_id記錄下新插入的ID。
2). 如果是“select”,該函數會用$this->last_result記錄下查詢到結果集,返回查詢到的記錄行數。
如果出錯,則返回FALSE。
實例:
<?php $wpdb->query( " UPDATE $wpdb->posts SET post_parent = 7 WHERE ID = 15 AND post_status = 'static' " ); ?>
2、function escape($data)
使用反斜線引用數據,也就是使用魔術引號。
實例:
<?php $name = $wpdb->escape($name); $email = $wpdb->escape($email); $wpdb->query("INSERT INTO myusers (id, name, email) VALUES (NULL, '$name', '$email')"); ?>
3、function insert($table, $data, $format = null)
這是插入記錄函數,第一個參數是表的字段數組,第二個是數據數組,第三個用於規定$data中每個值的數據類型。插入數據返回1,否則爲0。
實例:
<?php $wpdb->insert( 'table', array( 'column1' => 'value1', 'column2' => 123 ), array( '%s', '%d' ) ); ?>
4、function update($table, $data, $where, $format = null, $where_format = null)
這是更新記錄函數,第一個參數是表的字段數組,第二個是數據數組,第三個是條件數組,第四個和第五個分別用於規定$data和$where中每個值的數據類型。更新了爲1,否則爲0。
實例:
<?php $wpdb->update( 'table', array( 'column1' => 'value1', // string 'column2' => 'value2' // integer (number) ), array( 'ID' => 1 ), array( '%s', // value1 '%d' // value2 ), array( '%d' ) ); ?>
5、function get_var($query = null, $x = 0, $y = 0)
這個函數只返回一個值,默認是第0行第0列。如果$query不爲空,首先執行查詢,如果$query爲空的話,則表示從cache中選出;然後返回第X列第Y行的值。
實例:
<?php $user_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->users;" ) ); echo "<p>User count is {$user_count}</p>"; ?>
6、function get_row($query = null, $output = OBJECT, $y = 0)
返回一行,$output指定返回的類型,可以是ARRAY_A(關聯數組)、ARRAY_N(數字數組)或者OBJECT(對象)。$y指定第幾行。
實例:
默認情況下,$output的值爲OBJECT,那麼用法如下:
<?php $mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10"); echo $mylink->link_id; // prints "10" ?>
如果$output的值爲ARRAY_A,那麼用法如下:
<?php $mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10",ARRAY_A); echo $mylink['link_id']; // prints "10" ?>
如果$output的值爲ARRAY_N,那麼用法如下:
<?php $mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10",ARRAY_N); echo $mylink[1]; // prints "10" ?>
7、function get_col($query = null, $x = 0)
返回一列,$x指定第幾列。
實例:
<?php $names = $wpdb->get_col("SELECT name, email FROM myusers", 0) foreach ( $names as $name ) { echo $name; } ?>
8、function get_results($query = null, $output = OBJECT)
返回查詢的結果集,允許以ARRAY_A、ARRAY_N或者OBJECT三種方式返回。
實例:
<?php $fivesdrafts = $wpdb->get_results( " SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'draft' AND post_author = 5 " ); foreach ( $fivesdrafts as $fivesdraft ) { echo $fivesdraft->post_title; } ?>
9、function get_col_info($info_type = 'name', $col_offset = -1)
返回字段信息。
實例:
<?php $col_name = $wpdb->get_col_info('name', 0); echo $col_name; ?>
10、function prepare($query = null)
這是一個可變參數函數,即函數的參數個數不確定。$query爲SQL語句,其中可以包含像%s和%d這樣的佔位符,其它所有非佔位符裏面的%都要使用%%來代替。由於SQL語句中可能含有像單引號、雙引號這樣的特殊字符,如果不進行處理就直接提交給數據庫,可能會導致錯誤或者出現安全問題。爲此,我們可以通過prepare函數來對SQL語句進行預處理。其實該函數的用法非常簡單,就跟C語言中的sprintf()和vsprintf()函數差不多。
用法:
<?php $sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ...] ); ?>
實例:
<?php $metakey = "Harriet's Adages"; $metavalue = "WordPress' database interface is like Sunday Morning: Easy."; $wpdb->query( $wpdb->prepare( " INSERT INTO $wpdb->postmeta ( post_id, meta_key, meta_value ) VALUES ( %d, %s, %s ) ", 10, $metakey, $metavalue ) ); ?>
當然,還有一些不常使用的函數,這裏就不詳細介紹了。另外還有兩個常量:SAVEQUERIES和WP_DEBUG。設置SAVEQUERIES常量爲TRUE,可以把在數據庫裏執行的所有查詢及其停止時間保存到$this->queries這個數組中,以後調試的時候可以使用;而設置WP_DEBUG常量爲TRUE,則可以輸出錯誤。不過,這兩個常量開關默認都沒有打開,我們在測試的時候,可以在wp_config.php文件中將其開啓。