您现在的位置是:首页 > cms教程 > WordPress教程WordPress教程
使用Wordpress中wpdb类操作数据库的实现方法
谢协2025-03-17WordPress教程已有人查阅
导读WordPress包含一个操作数据库的类--wpdb,该类基于ezSQL(由Justin Vincent维护的数据库操作项目)编写,包含了其基本的功能。使用说明请不要直接调用wpdb类中的方法。WordPress定
WordPress包含一个操作数据库的类--wpdb,该类基于ezSQL(由Justin Vincent维护的数据库操作项目)编写,包含了其基本的功能。使用说明
请不要直接调用wpdb类中的方法。WordPress定义了$wpdb的全局变量,所以请直接调用该全局变量$wpdb的实例来操作数据库。(调用之前不要忘了声明引用全局变量$wpdb。参考globalize)
$wpdb对象可以用来操作WordPress数据库中的每一个表,不仅仅是WordPress自动创建的基本表。例如,你有一个自定义的表叫做mytable,那么可以使用如下语句来查询:
这个查询函数允许你在wordpress的数据库里运行任何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 键和值。
设置页面 Page 15 的父级页面为
7.
获取并显示用户数量
获取ID为10的链接的全部信息
作为对比, 使用
然后
选择一列
获取用户 5 发布的草稿的id和标题,并显示标题。
插入一行数据到数据表中
在一行中插入两列,第一个值为字符串,第二个为数字:
更新数据库的记录。
更新ID为1的行,第一列的值为字符串,第二列的值为数组:
使用 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
评论表
请不要直接调用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.
本文标签:
很赞哦! ()
相关教程
图文教程
Nginx配置wordpress的方法示例
安装php:https://windows.php.net/download/,php默认启动命令:php-cgi.exe -b 127.0.0.1:9000安装wordpress:https://cn.wordpress.org/原来wordpress是部署在iis中,安装了ngin
docker创建WordPress并强制使用https的方法
1、创建数据文件夹 mkdir /data ,所有文件都在此配置。2、安装docker,3、配置mysql:-p 3306:3306 端口映射--name mysql 自定义容器名-e MYSQL_ROOT_PASSWORD=yourpassword 配置mysql默认密码
wordpress修改域名后图片不显示怎么办
WordPress修改域名后图片无 常显示,如下首先来到WordPress后台选择设置选项在WordPress地址和站点地址输入新的URL地址
wordpress二次开发难不难
国内很多网站采用phpcms,dedecms进行二次开发,好像很少公司用wordpress进行二次开发,你觉得wordpress进行二次开发方便吗?
相关源码
-
帝国cms淘宝客京东联盟网站整站源码下载本模板基于帝国CMS内核深度开发,为淘宝客行业量身定制。随着腾讯微信与淘宝生态的互联互通,淘宝客链接现可在微信、QQ等平台直接分享,为推广带来更多便利。模板特别优化了店铺推广功能,有效避免商品下架导致的链接失效问题,同时支持京东联盟等多平台商品推广。查看源码 -
帝国CMS7.5H5小游戏模板游戏攻略下载网整站源码本模板基于帝国CMS系统开发,为H5小游戏和APP应用资讯类网站设计。模板架构针对小游戏行业特点优化,支持游戏发布、资讯分享、应用推荐等功能,满足各类小游戏门户网站的建设需求。查看源码 -
(PC+WAP)绿色草坪地坪操场pbootcms网站模板该模板基于PbootCMS内核开发,专为人造草坪、地坪施工企业设计,采用绿色主题呼应行业属性,实现PC与WAP端全栈响应式适配,确保跨设备无缝浏览体验。查看源码 -
(自适应响应式)HTML5幕墙装饰工程建筑装修公司pbootcms模板下载基于PbootCMS开发的响应式模板,为幕墙工程、建筑装饰企业设计,通过数字化展示提升企业专业形象与项目展示能力。结构化数据标记增强项目案例收录,智能URL路由优化,支持每个工程案例独立设置关键词与描述查看源码 -
自适应营销型IT网络工作室互联网建站公司pbootcms网站模板为IT网络服务商、建站企业打造的高性能营销门户,基于PbootCMS开源内核深度开发采用HTML5自适应架构,实现PC与手机端数据实时同步交互。查看源码 -
(自适应)中英双语配线器材扎带线卡网站pbootcms模板免费下载为线缆管理、电气配线领域打造的响应式网站模板,采用PbootCMS内核开发,可快速搭建企业级产品展示平台,数据实时同步管理。查看源码
| 分享笔记 (共有 篇笔记) |

