網頁

2011年10月31日 星期一

[WordPress] wpdb資料庫


英文版的文章在這裡
wordpress提供了一個全局變量$wpdb來訪問wordpress數據庫,通過wpdb可以實現對數據庫的各種操作。這裡各種操作包括添加一個新表,查詢,刪除,更新​​等等。提供了處理用戶自定義數據的接口。注意在調用的函數里面要全局化這個變量。通過這個變量可以訪問數據庫中的任何表,但是僅限於一個數據庫,如果要訪問多個數據庫,需要重新實例化一個wpdb類。這裡只討論單個數據庫的情況。

查詢

<?php $wpdb->query(" DELETE FROM $wpdb->post WHERE post_id = '13′ “); ?>
其中query的參數是任何mysql語句。返回值是有多少行被選出、影響。如果出錯返回FALSE。

選出一個變量

<?php $wpdb->get_var('query',column_offset,row_offset); ?>
其中query為要查詢的mysql語句,如果為空的話,則表示從cache中選出。column_Offset和row_offet表示制定query返回值的第幾列和第幾行,缺省值為零。典型用法為:<?php $user_count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->users;"));?> 這個sql只選出一個值,缺省的0行0列,即表示選出用戶數目。目前還不清楚,這里為什麼總是要加prepare在前面。

選出一行

<?php $wpdb->get_row('query', output_type, row_offset); ?>
query為要執行的mysql語句,output_type表示返回值是object,hash或者是數組;row_offset表示第幾行。

缺省情況下output_type為object。

$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10");
echo $mylink->link_id; // prints "10"

如果output_type=ARRAY_A,那麼:

$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A);
echo $mylink['link_id']; // prints "10"

如果output_type=ARRAY_N,那麼:

$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_N); 
echo $mylink[1]; // prints "10"

選出一列

<?php $wpdb->get_col('query',column_offset); ?>

一般選出

 $wpdb->get_results('query', output_type); 
例子:$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;
}

插入一行

<?php $wpdb->insert( $table, $data, $format ); ?>
實例:$wpdb->insert( 'table', array( 'column1′ => 'value1′, 'column2′ => 123 ), array( '%s', '%d' ) )

更新

$wpdb->update( $table, $data, $where, $format = null, $where_format = null );
實例:$wpdb->update( 'table', array( 'column1' => 'value1', ' column2' => 'value2' ), array( 'ID' => 1 ), array( '%s', '%d' ), array( '%d' ) )

關於wpdb prepare

前面提到不清楚為什麼每個mysql語句都會包在prepare中,這裡給出解釋:因為mysql語句中可能含有單引號雙引號這樣的字符,如果不加處理直接送給mysql,可能會導致錯誤。於是這里通過一個prepare來對mysql語句進行預處理。prepare的語法是:
 $sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] ); 
在query中可以包含%d,%S,%f,分別表示後面參數的類型是整數,字符和浮點,如果要顯示%號,則用%%,語法和C語言裡面的printf基本一樣。
到這里基本上就講完了。對一般數據庫的處理應該都沒有問題了。如果碰到問題可以在本文開始時提到的那篇文章中去查閱。
本文地址: http://www.bagualu.net/wordpress/?p=641轉載請註明

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。