使用WordPress中的wpdb類運算元據庫
WordPress包含一個運算元據庫的類——wpdb
,該類基於ezSQL(由Justin Vincent維護的資料庫操作專案)編寫,包含了其基本的功能。
使用說明
請不要直接呼叫wpdb
類中的方法。WordPress定義了$wpdb
的全域性變數,所以請直接呼叫該全域性變數$wpdb
的例項來運算元據庫。(呼叫之前不要忘了宣告引用全域性變數$wpdb
。參考globalize)
$wpdb
物件可以用來操作WordPress資料庫中的每一個表,不僅僅是WordPress自動建立的基本表。例如,你有一個自定義的表叫做mytable,那麼可以使用如下語句來查詢:
$myrows = $wpdb->get_results( "SELECT id, name FROM mytable" );
$wpdb
物件可以讀取多個表,但是其只針對WordPress的資料庫。如果你需要連線其他資料庫,那麼你應該使用你自己的資料庫連線資訊,並呼叫wpdb
類來建立一個你自己的資料庫操作例項。如果你有多個資料庫需要連線,那麼你可以考慮使用hyperdb來替代$wpdb
。
在資料庫上執行任務查詢
這個查詢函式允許你在wordpress的資料庫裡執行任何SQL查詢。當然了,最好能利用如下的特定函式,
<?php $wpdb->query(`query`); ?>
- query
- (string) 你需要執行的SQL查詢
此函式返回操作/查詢的行或列的整數。如果出現了MySQL錯誤,此函式將返回 FALSE
(注意: 因為 0 和 FALSE 都可能被返回, 確保你使用了正確的比較運算子:等於 ==
vs. 一致 ===
)。
注意:As with all functions in this class that execute SQL queries, you must SQL escape all inputs (e.g., wpdb->escape($user_entered_data_string)
). See the section entitled Protect Queries Against SQL Injection Attacks below.
示例
刪除屬於id為13的文章的‘gargle’meta 鍵和值。
$wpdb->query(" DELETE FROM $wpdb->postmeta WHERE post_id = `13` AND meta_key = `gargle`");
在WordPress中由 delete_post_meta()
執行.
設定頁面 Page 15 的父級頁面為 7.
$wpdb->query(" UPDATE $wpdb->posts SET post_parent = 7 WHERE ID = 15 AND post_status = `static`");
選擇一個變數
The get_var
function returns a single variable from the database. Though only one variable is returned, the entire result of the query is cached for later use. Returns NULL if no result is found.
<?php $wpdb->get_var(`query`,column_offset,row_offset); ?>
- query
- (string) The query you wish to run. Setting this parameter to
null
will return the specified variable from the cached results of the previous query. - column_offset
- (integer) The desired column (0 being the first). Defaults to 0.
- row_offset
- (integer) The desired row (0 being the first). Defaults to 0.
示例
獲取並顯示使用者數量
<?php $user_count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->users;")); echo `<p>User count is ` . $user_count . `</p>`; ?>
獲取並顯示 自定義欄位值 的總和.
<?php $meta_key = `miles`;//set this to appropriate custom field meta key $allmiles=$wpdb->get_var($wpdb->prepare("SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key)); echo `<p>Total miles is `.$allmiles . `</p>`; ?>
選擇一行
To retrieve an entire row from a query, use get_row
. The function can return the row as an object, an associative array, or as a numerically indexed array. If more than one row is returned by the query, only the specified row is returned by the function, but all rows are cached for later use. Returns NULL if no result is found.
<?php $wpdb->get_row(`query`, output_type, row_offset); ?>
- query
- (string) The query you wish to run.
- output_type
- One of three pre-defined constants. Defaults to OBJECT.
- OBJECT – result will be output as an object.
- ARRAY_A – result will be output as an associative array.
- ARRAY_N – result will be output as a numerically indexed array.
- row_offset
- (integer) The desired row (0 being the first). Defaults to 0.
示例
獲取ID為10的連結的全部資訊
$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10");
$mylink
物件的屬性是SQL查詢結果的列名(此例中是所有 $wpdb->links
表中的列名)。
echo $mylink->link_id; // prints "10"
作為對比, 使用
$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A);
將返回關聯陣列:
echo $mylink[`link_id`]; // prints "10"
然後
$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_N);
將返回索引陣列:
echo $mylink[1]; // prints "10"
選擇一列
To SELECT a column, use get_col
. This function outputs a dimensional array. If more than one column is returned by the query, only the specified column will be returned by the function, but the entire result is cached for later use. Returns an empty array if no result is found.
<?php $wpdb->get_col(`query`,column_offset); ?>
- query
- (string) the query you wish to execute. Setting this parameter to
null
will return the specified column from the cached results of the previous query. - column_offset
- (integer) The desired column (0 being the first). Defaults to 0.
示例
For this example, assume the blog is devoted to information about automobiles. Each post describes a particular car (e.g. 1969 Ford Mustang), and three Custom Fields, manufacturer, model, and year, are assigned to each post. This example will display the post titles, filtered by a particular manufacturer (Ford), and sorted by model and year.
The get_col form of the wpdb Class is used to return an array of all the post ids meeting the criteria and sorted in the correct order. Then a foreach construct is used to iterate through that array of post ids, displaying the title of each post. Note that the SQL for this example was created by Andomar.
<?php $meta_key1 = `model`; $meta_key2 = `year`; $meta_key3 = `manufacturer`; $meta_key3_value = `Ford`; $postids=$wpdb->get_col($wpdb->prepare(" SELECT key3.post_id FROM $wpdb->postmeta key3 INNER JOIN $wpdb->postmeta key1 on key1.post_id = key3.post_id and key1.meta_key = %s INNER JOIN $wpdb->postmeta key2 on key2.post_id = key3.post_id and key2.meta_key = %s WHERE key3.meta_key = %s and key3.meta_value = %s ORDER BY key1.meta_value, key2.meta_value",$meta_key1, $meta_key2, $meta_key3, $meta_key3_value)); if ($postids) { echo `List of ` . $meta_key3_value . `(s), sorted by ` . $meta_key1 . `, ` . $meta_key2; foreach ($postids as $id) { $post=get_post(intval($id)); setup_postdata($post);?> <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p> <?php } } ?>
This example lists all posts that contain a particular custom field, but sorted by the value of a second custom field.
<?php //List all posts with custom field Color, sorted by the value of custom field Display_Order //does not exclude any `post_type` //assumes each post has just one custom field for Color, and one for Display_Order $meta_key1 = `Color`; $meta_key2 = `Display_Order`; $postids=$wpdb->get_col($wpdb->prepare(" SELECT key1.post_id FROM $wpdb->postmeta key1 INNER JOIN $wpdb->postmeta key2 on key2.post_id = key1.post_id and key2.meta_key = %s WHERE key1.meta_key = %s ORDER BY key2.meta_value+(0) ASC", $meta_key2,$meta_key1)); if ($postids) { echo `List of `. $meta_key1 . ` posts, sorted by ` . $meta_key2 ; foreach ($postids as $id) { $post=get_post(intval($id)); setup_postdata($post);?> <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p> <?php } } ?>
選擇通用結果
Generic, mulitple row results can be pulled from the database with get_results
. The function returns the entire query result as an array. Each element of this array corresponds to one row of the query result and, like get_row
, can be an object, an associative array, or a numbered array.
<?php $wpdb->get_results(`query`, output_type); ?>
- query
- (string) The query you wish to run. Setting this parameter to
null
will return the data from the cached results of the previous query. - output_type
- One of four pre-defined constants. Defaults to OBJECT. See SELECT a Row and its examples for more information.
- OBJECT – result will be output as a numerically indexed array of row objects.
- OBJECT_K – result will be output as an associative array of row objects, using first column`s values as keys (duplicates will be discarded).
- ARRAY_A – result will be output as an numerically indexed array of associative arrays, using column names as keys.
- ARRAY_N – result will be output as a numerically indexed array of numerically indexed arrays.
Since this function uses the `$wpdb->query()` function all the class variables are properly set. The results count for a `SELECT` query will be stored in $wpdb->num_rows.
示例
獲取使用者 5 釋出的草稿的id和標題,並顯示標題。
$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; }
獲取使用者 5 的所有草稿資訊
<?php $fivesdrafts = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_status = `draft` AND post_author = 5"); if ($fivesdrafts) : foreach ($fivesdrafts as $post) : setup_postdata($post); ?> <h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="連結到 <?php the_title(); ?>"><?php the_title(); ?></a></h2> <?php endforeach; else : ?> <h2> 未找到</h2> <?php endif; ?>
插入行
插入一行資料到資料表中
<?php $wpdb->insert( $table, $data, $format ); ?>
- table
- (string) 插入資料的資料表名稱。
- data
- (array) 插入的資料 (為 column => value 鍵值對). $data columns 和 $data values 都可以是 “raw” 資料 (neither should be SQL escaped).
- format
- (array|string) (optional) An array of formats to be mapped to each of the value in $data. If string, that format will be used for all of the values in $data. If omitted, all values in $data will be treated as strings unless otherwise specified in wpdb::$field_types.
Possible format values: %s as string; %d as decimal number; and %f as float.
After insert, the ID generated for the AUTO_INCREMENT column can be accessed with:
$wpdb->insert_id
如果不能插入行,此函式返回false
示例
在一行中插入兩列,第一個值為字串,第二個為數字:
$wpdb->insert( `table`, array( `column1` => `value1`, `column2` => 123 ), array( `%s`, `%d` ) )
更新記錄
更新資料庫的記錄。
<?php $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); ?>
- table
- (string) 要更新的表名稱。
- data
- (array) 需要更新的資料(使用格式:column => value)。Both $data columns and $data values should be “raw” (neither should be SQL escaped).
- where
- (array) A named array of WHERE clauses (in column => value pairs). Multiple clauses will be joined with ANDs. Both $where columns and $where values should be “raw”.
- format
- (array|string) (optional) An array of formats to be mapped to each of the values in $data. If string, that format will be used for all of the values in $data.
- where_format
- (array|string) (optional) An array of formats to be mapped to each of the values in $where. If string, that format will be used for all of the items in $where.
Possible format values: %s as string; %d as decimal number and %f as float. If omitted, all values in $where will be treated as strings.
示例
更新ID為1的行,第一列的值為字串,第二列的值為陣列:
$wpdb->update( `table`, array( `column1` => `value1`, `column2` => `value2` ), array( `ID` => 1 ), array( `%s`, `%d` ), array( `%d` ) )
防止SQL查詢注入攻擊
For a more complete overview of SQL escaping in WordPress, see database Data Validation. That Data Validationarticle is a must-read for all WordPress code contributors and plugin authors.
Briefly, though, all data in SQL queries must be SQL-escaped before the SQL query is executed to prevent against SQL injection attacks. This can be conveniently done with the prepare
method, which supports both asprintf()-like and vsprintf()-like syntax.
<?php $sql = $wpdb->prepare( `query` [, value_parameter, value_parameter ... ] ); ?>
- query
- (string) The SQL query you wish to execute, with
%s
and%d
placeholders. Any other%
characters may cause parsing errors unless they are escaped. All%
characters inside SQL string literals, including LIKE wildcards, must be double-% escaped as%%
. - value_parameter
- (int|string|array) The value to substitute into the placeholder. Many values may be passed by simply passing more arguments in a sprintf()-like fashion. Alternatively the second argument can be an array containing the values as in PHP`s vsprintf() function. Care must be taken not to allow direct user input to this parameter, which would enable array manipulation of any query with multiple placeholders. Values must not already be SQL-escaped.
示例
Add Meta key => value pair “Harriet`s Adages” => “WordPress` database interface is like Sunday Morning: Easy.” to Post 10.
$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 ) );
Performed in WordPress by add_meta()
.
The same query using vsprintf()-like syntax.
$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 )", array(10, $metakey, $metavalue) ) );
Note that in this example we pack the values together in an array. This can be useful when we don`t know the number of arguments we need to pass until runtime.
Notice that you do not have to worry about quoting strings. Instead of passing the variables directly into the SQL query, use a %s
placeholder for strings and a %d
placedolder for integers. You can pass as many values as you like, each as a new parameter in the prepare()
method.
顯示和隱藏SQL錯誤
You can turn error echoing on and off with the show_errors
and hide_errors
, respectively.
<?php $wpdb->show_errors(); ?>
<?php $wpdb->hide_errors(); ?>
You can also print the error (if any) generated by the most recent query with print_error
.
<?php $wpdb->print_error(); ?>
獲取列資訊
You can retrieve information about the columns of the most recent query result with get_col_info
. This can be useful when a function has returned an OBJECT whose properties you don`t know. The function will output the desired information from the specified column, or an array with information on all columns from the query result if no column is specified.
<?php $wpdb->get_col_info(`type`, offset); ?>
- type
- (string) What information you wish to retrieve. May take on any of the following values (list taken from theezSQL docs). Defaults to name.
- name – column name. Default.
- table – name of the table the column belongs to
- max_length – maximum length of the column
- not_null – 1 if the column cannot be NULL
- primary_key – 1 if the column is a primary key
- unique_key – 1 if the column is a unique key
- multiple_key – 1 if the column is a non-unique key
- numeric – 1 if the column is numeric
- blob – 1 if the column is a BLOB
- type – the type of the column
- unsigned – 1 if the column is unsigned
- zerofill – 1 if the column is zero-filled
- offset
- (integer) Specify the column from which to retrieve information (with 0 being the first column). Defaults to-1.
- -1 – Retrieve information from all columns. Output as array. Default.
- Non-negative integer – Retrieve information from specified column (0 being the first).
清除快取
使用 flush
清除SQL查詢結果快取
<?php $wpdb->flush(); ?>
可以清除 $wpdb->last_result
, $wpdb->last_query
, 和 $wpdb->col_info
的快取。
類變數
- $show_errors
- 是否開啟 Error echoing. 預設為 TRUE.
- $num_queries
- 已執行的查詢的數量
- $last_query
- 已執行的最後一條查詢
- $queries
- You may save all of the queries run on the database and their stop times by setting the SAVEQUERIES constant to TRUE (this constant defaults to FALSE). If SAVEQUERIES is TRUE, your queries will be stored in this variable as an array.
- $last_result
- 最近的查詢結果
- $col_info
- 最新查詢結果的列資訊. 查閱 獲取列資訊章節.
- $insert_id
- ID自動增長列生成的最近一條插入語句的ID
- $num_rows
- 最近一個查詢返回的行數
- $prefix
- 表字首
- $last_error
- 錯誤資訊
多站點引數
如果你正在使用多站點, 你也可以訪問:
- $blogid
- 部落格ID(多blog環境)
資料表
The WordPress database tables are easily referenced in the wpdb
class.
- $posts
- 文章表
- $postmeta
- The Meta Content (a.k.a. Custom Fields) table.
- $comments
- 評論表
- $commentmeta
- The table contains additional comment information.
- $terms
- The terms table contains the `description` of Categories, Link Categories, Tags.
- $term_taxonomy
- The term_taxonomy table describes the various taxonomies (classes of terms). Categories, Link Categories, and Tags are taxonomies.
- $term_relationships
- The term relationships table contains link between the term and the object that uses that term, meaning this file point to each Category used for each Post.
- $users
- 使用者表
- $usermeta
- The usermeta table contains additional user information, such as nicknames, descriptions and permissions.
- $links
- 連結表
- $options
- The Options table.
- 本文轉自黃聰部落格園部落格,原文連結:http://www.cnblogs.com/huangcong/archive/2011/07/12/2104398.html如需轉載請自行聯絡原作者
相關文章
- 運算元據庫
- Android中使用LitePal運算元據庫Android
- 運算元據庫表
- jmeter運算元據庫JMeter
- DDL:運算元據庫
- Python運算元據庫(3)Python
- lavavel 中運算元據庫查詢別名
- 利用 Sequelize 來運算元據庫
- java 運算元據庫備份Java
- Python學習:運算元據庫Python
- [python] 基於Dataset庫運算元據庫Python
- Django在Ubuntu下運算元據庫DjangoUbuntu
- 【Spark篇】---SparkStreaming中運算元中OutPutOperator類運算元Spark
- python運算元據Python
- 肖sir__jmeter之運算元據庫JMeter
- 資料庫誤運算元據恢復資料庫
- 教你如何用python運算元據庫mysql!!PythonMySql
- MySQL DML運算元據MySql
- 如何讓Designer更好地運算元據庫物件物件
- spring-boot-route(九)整合JPA運算元據庫Springboot
- spring-boot-route(七)整合jdbcTemplate運算元據庫SpringbootJDBC
- spring-boot-route(八)整合mybatis運算元據庫SpringbootMyBatis
- uniapp單機軟體運算元據庫(安卓)APP安卓
- Go語言運算元據庫及其常規操作Go
- Oracle OCP(10):運算元據Oracle
- 好程式設計師分享DDL之運算元據庫程式設計師
- 一文快速回顧 Java 運算元據庫的方式-JDBCJavaJDBC
- sql運算元據庫(2)--->DQL、資料庫備份和還原SQL資料庫
- HelloDjango 系列教程:第 04 篇:Django 遷移、運算元據庫Django
- Golang 學習系列第四天:運算元據庫 PostgreSQLGolangSQL
- Pandas 基礎 (19) - 運算元據庫 (read_sql, to_sql)SQL
- Android中運算元據庫SQL語句的講解,簡單的查詢修改等操作學生類的例子講解AndroidSQL
- python中Laplacian運算元如何使用Python
- 使用運算元控制公式運算公式
- Spring Boot入門系列(十四)使用JdbcTemplate運算元據庫,配置多資料來源!Spring BootJDBC
- 到底應該先操作快取還是先運算元據庫?快取
- Oracle delete誤運算元據恢復(BBED)Oracledelete
- 前端筆記之伺服器&Ajax(中)MySQL基礎操作&PHP運算元據庫&Ajax前端筆記伺服器MySqlPHP
- 透過延時從庫+binlog複製,恢復誤運算元據