WordPress數(shù)據(jù)庫操作函數(shù)詳解

字號:


    為了便于訪問數(shù)據(jù)庫,WordPress提供了一個友好的數(shù)據(jù)庫操作類:wpdb,該類定義在/wp-includes/wp-db.php文件中。wpdb類封裝了所有的數(shù)據(jù)庫操作函數(shù),它是基于開源的數(shù)據(jù)庫操作類ezSQL進行修改的,使其更適合于WordPress,也使其僅適用于mySQL數(shù)據(jù)庫。同時,WordPress還提供了一個全局變量$wpdb,并將其實例化為wpdb類的對象。這樣我們就可以直接使用$wpdb來調用所有的數(shù)據(jù)庫操作函數(shù)。
    通過這個$wpdb對象,我們可以對WordPress數(shù)據(jù)庫進行任何操作,包括建表、查詢、刪除、更新等。要注意的是,如果要在自定義函數(shù)中使用$wpdb,必須先將其全局化(global $wpdb;)。
    下面就詳細介紹一下WordPress的數(shù)據(jù)庫操作函數(shù):
    1、function query($query)
    這個函數(shù)是最基本的數(shù)據(jù)庫操作函數(shù),$query為SQL語句,提交給數(shù)據(jù)庫執(zhí)行,結果分兩種情況:
    1). 如果是“insert|delete|update|replace”, 返回受影響行數(shù),在“insert|replace”這種情況下,該函數(shù)會用$this->insert_id記錄下新插入的ID。
    2). 如果是“select”,該函數(shù)會用$this->last_result記錄下查詢到結果集,返回查詢到的記錄行數(shù)。
    如果出錯,則返回FALSE。
    實例:
    <?php
    $wpdb->query(
    "
    UPDATE $wpdb->posts
    SET post_parent = 7
    WHERE ID = 15 AND post_status = 'static'
    "
    );
    ?>
    2、function escape($data)
    使用反斜線引用數(shù)據(jù),也就是使用魔術引號。
    實例:
    <?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)
    這是插入記錄函數(shù),第一個參數(shù)是表的字段數(shù)組,第二個是數(shù)據(jù)數(shù)組,第三個用于規(guī)定$data中每個值的數(shù)據(jù)類型。插入數(shù)據(jù)返回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)
    這是更新記錄函數(shù),第一個參數(shù)是表的字段數(shù)組,第二個是數(shù)據(jù)數(shù)組,第三個是條件數(shù)組,第四個和第五個分別用于規(guī)定$data和$where中每個值的數(shù)據(jù)類型。更新了為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)
    這個函數(shù)只返回一個值,默認是第0行第0列。如果$query不為空,首先執(zhí)行查詢,如果$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(關聯(lián)數(shù)組)、ARRAY_N(數(shù)字數(shù)組)或者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)
    這是一個可變參數(shù)函數(shù),即函數(shù)的參數(shù)個數(shù)不確定。$query為SQL語句,其中可以包含像%s和%d這樣的占位符,其它所有非占位符里面的%都要使用%%來代替。由于SQL語句中可能含有像單引號、雙引號這樣的特殊字符,如果不進行處理就直接提交給數(shù)據(jù)庫,可能會導致錯誤或者出現(xiàn)安全問題。為此,我們可以通過prepare函數(shù)來對SQL語句進行預處理。其實該函數(shù)的用法非常簡單,就跟C語言中的sprintf()和vsprintf()函數(shù)差不多。
    用法:
    <?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
    ) );
    ?>
    當然,還有一些不常使用的函數(shù),這里就不詳細介紹了。另外還有兩個常量:SAVEQUERIES和WP_DEBUG。設置SAVEQUERIES常量為TRUE,可以把在數(shù)據(jù)庫里執(zhí)行的所有查詢及其停止時間保存到$this->queries這個數(shù)組中,以后調試的時候可以使用;而設置WP_DEBUG常量為TRUE,則可以輸出錯誤。不過,這兩個常量開關默認都沒有打開,我們在測試的時候,可以在wp_config.php文件中將其開啟。