wordpress数据库操作类wpdb的详细用法

wordpress提供了一系列用于数据库操作函数类 $wpdb,此类是一个全局变量,每次使用时都需要先global $wpdb。

执行数据库查询

你可以通过query函数在WordPress数据库中执行任何SQL查询。不过我们推荐为SELECT查询使用更为具体的函数。

query(‘query’); ?>

query

字符串)你希望执行的SQL语句。

函数返回一个与选定内容的行数相应的整数。如果发生MySQL错误,函数返回FALSE。(注意:0和FALSE都可能被返回,确保使用正确的比较运算符:equality == vs. identicality ===)。

注意:使用wpdb类中所有可执行SQL查询的函数时,都需要将所有输入内容/inputs进行字符转义(如wpdb->escape($user_entered_data_string))。见下文。

示例

删除ID为13的文章的“gargle”元关键字和值。

$wpdb->query(”DELETE FROM $wpdb->postmeta WHERE post_id = ’13’AND meta_key = ‘gargle’”);

由delete_post_meta执行。

将页面7设为页面15的父级。

$wpdb->query(”UPDATE $wpdb->posts SET post_parent = 7WHERE ID = 15 AND post_status = ‘static’”);

选择一个变量

get_var函数返回一个来自数据库的变量。虽然只返回一个变量,但查询结果会被整体缓存,供后期使用。如果没有查询结果,返回NULL。

get_var(‘query’,column_offset,row_offset); ?>

query

(字符串)你希望执行的查询。将该参数设为null会使函数返回上一个查询缓存结果中的具体变量。

column_offset

(整数)预计的数据库表的列数(0为表中第一列)。默认值为0。

row_offset

(整数)预计的数据库表的行数(0为表中第一行)。默认值为0。

示例

检索并返回用户数量。

get_var($wpdb->prepare(“SELECT COUNT(*) FROM $wpdb->users;”));echo ‘

User count is ‘ . $user_count . ‘

’;?>

检索并返回自定义字段值得总数。

get_var($wpdb->prepare(“SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s”, $meta_key));echo ‘

Total miles is ‘.$allmiles . ‘

’;?>

选择表行

从某个查询中检索一整行内容,可使用get_row函数。该函数可将行作为对象、关联数组或数值索引数组返回。如果查询返回了多个行,函数只返回指定行,但所有返回的行都将被缓存以供日后使用。

get_row(‘query’, output_type, row_offset); ?>

query

(字符串)你希望执行的查询语句。

output_type

三个预定义的常量之一。默认值为OBJECT。

OBJECT —— 返回的结果以对象形式输出ARRAY_A ——返回的结果以关联数组形式输出ARRAY_N —— 返回的结果以数值索引数组形式输出row_offset

(整数)预计的数据库表的行数(0为表中第一行)。默认值为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”

选择表列

要选择数据库表中的一列内容,可使用get_col函数。该函数输出一个空间数组,如果查询返回了多个列,函数只返回指定列,但所有返回的列都将被缓存以供日后使用。

get_col(‘query’,column_offset); ?>

query

(字符串)你希望执行的查询。将该参数设为null会使函数返回上一个查询的缓存结果中的执行表列。

column_offset

(整数)预计的数据库表的列数(0为表中第一列)。默认值为0。

示例

在这个例子中,我们假设有一个专注于发布汽车资讯的博客,博客中每篇文章都介绍了一辆特别的汽车(如1969 Ford Mustang)。此外我们将三个自定义字段——manufacture、model和year指定给各篇文章。这里我们的目的是显示manufacturer(生产商)为Ford的所有文章的标题,各个标题按模型和年份排列。

可以利用wpdb类的get_col形式返回一个符合要求、以正确顺序排列的文章ID数组。然后通过foreach构造函数重复该文章ID数组,显示每篇文章的标题。本示例的SQL查询由 Andomar编写。

<?php$meta_key1 = ‘model’;$meta_key2 = ‘year’;$meta_key3 = ‘manufacturer’;$meta_key3_value = ‘Ford’;

$postids=$wpdb->get_col($wpdb->prepare(”SELECT key3.post_idFROM $wpdb->postmeta key3INNER JOIN $wpdb->postmeta key1on key1.post_id = key3.post_idand key1.meta_key = %sINNER JOIN $wpdb->postmeta key2on key2.post_id = key3.post_idand key2.meta_key = %sWHERE key3.meta_key = %sand key3.meta_value = %sORDER 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);?>

” rel=”bookmark” title=”Permanent Link to ”>

选择生成的结果

get_results可以从数据库中抽取函数生成的多行结果。Wpdb函数以数组形式返回整个查询结果。数组中每个元素都对应查询结果中的一行,如get_row既可以是对象,也可以是关联数组或数值型数组。

get_results(‘query’, output_type); ?>

query

(字符串)你希望执行的查询语句。将该参数设为null会使函数返回上一个查询的缓存结果中的信息

output_type

三个预定义的常量之一。默认值为OBJECT。更多信息请见上文中的“选择表行”。

OBJECT —— 以对象形式输出返回的结果ARRAY_A ——以关联数组形式输出返回的结果ARRAY_N —— 以数值索引数组形式输出返回的结果示例

获取ID为5的用户的所有文章草稿的ID和标题并回应标题。

$fivesdrafts = $wpdb->get_results(“SELECT ID, post_title FROM $wpdb->postsWHERE post_status = ‘draft’ AND post_author = 5”);

foreach ($fivesdrafts as $fivesdraft) {echo $fivesdraft->post_title;}

获取ID为5的用户的所有文章草稿信息。

get_results(“SELECT * FROM $wpdb->postsWHERE post_status = ‘draft’ AND post_author = 5″);if ($fivesdrafts) :foreach ($fivesdrafts as $post) :setup_postdata($post);?>

” rel=”bookmark”title=”Permanent Link to ”>

Not Found

插入表行/列

在数据库表中插入一行/列内容。

示例

在一行中插入两列内容,第一个列的值为字符串,第二列的值为数字:

$wpdb->insert( ‘table’, array( ‘column1’ => ‘value1’, ‘column2’ => 123 ), array( ‘%s’, ‘%d’ ) )可能的值:- %s 为字符串,- %d 为十进制数字,- %f 为浮点。

更新表行/列

更新数据库表中某行/列的内容。

示例

要更新一个表行,其ID为1,该行第一列中的值是一个字符串,第二列中的值是一个数字:

$wpdb->update( ‘table’, array( ‘column1’ => ‘value1’, ‘column2’ => ‘value2’ ), array( ‘ID’ => 1 ), array( ‘%s’, ‘%d’ ), array( ‘%d’ ) )防止数据库查询遭到SQL注入式攻击更多在WordPress中避免SQL攻击的信息,请看数据验证。这是WordPress代码编写者和插件开发者的必读文章。

简单地说,执行SQL查询以阻止SQL注入式攻击前,SQL查询中的所有数据都需要经过SQL字符转义。可以通过prepare方法快速完成字符转义,该方法使用 sprintf()-like语句。

prepare( ‘query'[, value_parameter, value_parameter … ] ); ?>

query

(字符串)你希望执行的SQL查询,以 %s 与%d作为占位符。

value_parameter

(字符串)提交到占位符中的值。该值此时必须没有被SQL转义。

示例

将Meta key => value pair “Harriet’s Adages” => “WordPress’ database interface is like Sunday Morning: Easy.”添加到ID为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 ) );

由add_meta()执行。

注意,这时你无须担心引用字符串。不要直接将变量传递给SQL查询,可将 %s作为字符串的占位符, %d作为整数的占位符。你可以传递任意个值,每一个都可以作为prepare()方法的新参数。

显示/隐藏SQL错误

你可以用show_errors来显示SQL错误,也可以用hide_errors隐藏SQL错误。

show_errors(); ?>hide_errors(); ?>

同样也可以用print_error输出近期的查询所生成的错误。

print_error(); ?>

获取数据库表中某列信息利用get_col_info可以检索到近期查询的表列信息。当你不了解某个函数返回的对象的属性时,就可以通过get_col_info函数获取信息。该函数从指定列中输出所需信息,如果没有指定某列,则函数输出一个以查询结果中所有列的信息为内容的数组。

get_col_info(‘type’, offset); ?>

type

(字符串)你希望检索的信息。可能为以下任何值之一(摘自 ezSQL文档)。默认值为name。

name ——表列的名称。默认值table ——列所属表格的表格名称max_length —— 表列的最大长度not_null —— 若表列不为Null则值为1primary_key —— 若表列是一个主键,值为1unique_key —— 若表列是唯一键,值为1multiple_key —— 若表列是非唯一键,值为1numeric —— 若表列是数值型,值为1blob —— 若表列为BLOB,值为1type —— 表列的类型unsigned —— 若表列无符号,值为1zerofill —— 若表列为zero-filled,值为1offset

(整数)从某个检索信息的表中指定表列(0为表中第一列)。默认值为-1。

-1 —— 从所有表列中检索信息。输出一个数组。默认值。非负整数 —— 从指定的表列中检索信息(0为表中第一列)。

清除缓存

用flush清除SQL结果缓存。

flush(); ?>

这会清除$wpdb->last_result、$wpdb->last_query以及$wpdb->col_info信息。

类变量$show_errors

是否显示SQL错误信息。默认为TRUE。

$num_queries

已经被执行的查询次数

$last_query

最近一次已经被执行的查询

$queries

将SAVEQUERIES常量设为TRUE(该常量默认值为FALSE),可以保存所有数据库查询及其停止时间。如果SAVEQUERIES值为TRUE,你的查询会被作为数组保存在$queries变量中。

$last_result

最近一次查询结果。

$col_info

最近一次查询结果的表列信息。参见获取表列信息。

$insert_id

最近一次INSERT查询为AUTO_INCREMENT列生成的ID。

$num_rows

最近一次查询返回的行数。

表在wpdb类中可以引用WordPress数据库表。

$posts

关于文章的数据库表

$users

关于用户的数据库表

$comments

评论表

$links

链接表

$options

选项表

$postmeta

元数据(自定义字段)表

$usermate

usermeta表中含有用户的其它信息,如昵称、个人说明与权限。

$terms

terms表中包括对分类目录、链接分类、标签的“说明”(description)

$term_taxonomy

term_taxonomy表介绍了WordPress的不同分类(taxonomy)。分类目录、链接分类、标签都是一种分类。

$term_relationships

term_relationships表中含有术语以及使用术语的对象之间的链接,即该表可以指向日志所属的分类目录。

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月17日
下一篇 2022年6月17日

相关推荐

  • 第一条创作

    来头条一个月,看到很多人刷金币,创作文章,颇有收获,我想成功不是偶然。 刷金币很多人一脑载进去,一刷一整天,到头也没多少收获,这不是生活的全部. 而是日积月累的成果 创作文章往往都…

    2022年4月26日
  • 7.22黄金周五最新价格走势分析附黄金日内投资操作建议解套策略

    黄金行情走势分析;   周五(7月22日)亚市盘初,现货黄金窄幅震荡,目前交投于1717美元附近,守住了隔夜大部分涨幅。隔夜金价探底回升,盘中一度跌至1680关口附近,为近16个月…

    2022年8月1日
  • 支付宝花呗额度怎么提升 做到四点轻松提额

    花呗是一款人气非常高的消费信贷服务,但很多人开通花呗额度在几千元左右,并且开通好几年都不涨额度,那么支付宝花呗额度怎么提升?下面来看提额方法。 1、完善个人信息 用户可以将自己的支…

    2022年10月19日
  • 手工外发的那些骚操作

    在旅游型城市的车站附近或城中村跟工业区的城中村,很容易看到写着手工外发的纸告示牌,那这里有什么门道呢 骗取初学时的工具费和材料押金 旅游型城市的用工量毕竟不大,看到这种简易的手工活…

    2022年8月11日
  • Jmeter结构体系-Jmeter简介及安装

    1.Jmeter简介及安装 Jmeter是一款开源桌面应用软件,可用来模拟用户负载来完成性能测试工作。Jmeter的功能在版本升级过程中已经十分强大,现在多数互联网公司都在使用Jm…

    2022年6月29日
  • 好看又好用的办公好物,电脑手机都能打字,双飞燕剪刀脚键盘体验

    现在很多朋友工作中要通过手机来参与在线会议或者是进行授权认证,所以经常要在电脑、手机还有平板之间切换,这时候就需要一会儿用键盘、一会儿用屏幕,非常的不方便,如果配备了一套能够多设备…

    2022年6月25日
  • 黑土地保护、互联网账号管理、外来入侵物种管理等多项法规正式施行

    央视网消息:今天(8月1日),一批新法规正式施行,涉及黑土地保护、互联网账号管理规定等多个方面。 修改后的《中华人民共和国反垄断法》8月1日起施行。这是反垄断法自2008年实施以来…

    2022年8月2日
  • 一个新进程的内核之旅

    一、背景 我们常在Linux平台bash环境下执行一条cmd,如看下当前文件有哪些”ls -l”。这条cmd会fork一个新的进程,然后完成ls可执行程序的…

    2022年7月11日
  • 免费推广平台有哪些(中国十大免费推广平台排行榜)

    俗话说“酒香不怕巷子深”,但在互联网时代,这句话恐怕并不适用。各行各业几乎处于饱和或半饱和状态,原先被动等待客户上门的营销模式已经过时了,唯有通过网络营销推广,主动将产品信息送到客…

    2022年4月19日
  • 大胆!LSB以2-0横扫T1打野居然对着镜头亮弱爆

    游戏马蹄铁原创 LSB击败T1 在今天韩国LCK的夏季赛比赛中,LSB比较出人意料地以2-0横扫了T1,而且几乎是盘盘碾压局。尤其是在第二局,中单Faker不仅被昔日自己的替补Cl…

    2022年8月11日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息