WordPress 数据库操作
像素鱼丸
2024-05-04
552
0

wpdb 类

wpdb类封装了所有的数据库操作函数,它是基于开源的数据库操作类ezSQL进行修改的,使其更适合于WordPress,也使其仅适用于mySQL数据库。

同时,WordPress还提供了一个全局变量$wpdb,并将其实例化为wpdb类的对象。

这样我们就可以直接使用$wpdb来调用所有的数据库操作函数。

注意 使用前 一定要 global $wpdb;

query 函数

最常用的函数,$query为SQL语句,提交给数据库执行,结果分两种情况:

如果是insert、delete、update、replace, 返回受影响行数,在insert、replace这种情况下,该函数会用$this->insert_id记 录下新插入的ID。 如果是“select”,该会用$this->last_result记录下查询到结果集,返回查询到的记录行数。 如果出错,则返回FALSE。

实例:

global $wpdb;
$wpdb->query(
  "
  UPDATE $wpdb->posts
  SET post_parent = 7
  WHERE ID = 15 AND post_status = 'static'
  "
);

prepare 函数

这是一个可变参数函数。在 SQL 语句中,可以包含像%s、%d和%f这样的占位符,其它所有非占位符里面的%都要使用%%来代替。由于SQL语句中可能含有像单引号、双引号这样的特殊字符,如果不进行处理就直接提交给数据库,可能会导致错误或者出现安全问题。为此,我们可以通过prepare函数来对SQL语句进行。

用法:

$sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ...] );

实例:

$metakey = 'Funny Phrases';
$metavalue = "WordPress' database interface is like Sunday Morning: Easy.";

$wpdb->query($wpdb->prepare(
    "
        INSERT INTO {$wpdb->prefix}postmeta
        ( post_id, meta_key, meta_value )
        VALUES ( %d, %s, %s )
    ",
    array(
        10,
        $metakey,
        $metavalue,
    )
));

insert 函数

insert( $table, $data, $format );

插入一行到表中,第一个参数是表名,第二个是数据数组,第三个用于规定$data中每个值的数据类型。 该函数返回影响的数据条数(成功的话,会是1) 如果有一个名为ID的自增主键,插入成功之后,使用 $wpdb->insert_id 可以获取插入成功的ID。

示例:

$wpdb->insert(
  'table',
  array(
    'column1' => 'value1',
    'column2' => 123
  ),
  array(
    '%s',
    '%d'
  )
);

update函数

更新记录,第一个参数是表的字段数组,第二个是数据数组,第三个是条件数组,第四个和第五个分别用于规定$和$where中每个值的数据类型。 更新失败的话返回 false,更新成功的话,返回受影响的记录数。

实例:

$wpdb->update( 
    'table', 
    array( 
        'column1' => 'value1',   // string
        'column2' => 'value2'    // integer (number) 
    ), 
    array( 'ID' => 1 ), 
    array( 
        '%s',   // value1
        '%d'    // value2
    ), 
    array( '%d' ) 
);

delete 函数

这个函数用来删除表中的记录,执行失败的话返回 false,更新成功的话,返回受影响的记录数。

// Default usage.
$wpdb->delete( 'table', array( 'ID' => 1 ) );
// Using where formatting.
$wpdb->delete( 'table', array( 'ID' => 1 ), array( '%d' ) );

get_var函数

这个只返回一个值,默认是第0行第0列。如果$query不为空,首先执行查询,如果$query为空的话,则表示从cache中选出;然后返回第X列第Y行的值。

实例:

$user_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->users;") );
echo "<p>User count is {$user_count}</p>";

get_row函数

返回一行,$output指定返回的类型,可以是ARRAY_A(关联数组)、ARRAY_N(数字数组)或者OBJECT(对象)。$y指定第几行。

实例:

默认情况下,$output的值为OBJECT,那么用法如下:

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

如果$output的值为ARRAY_A,那么用法如下:

 

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

如果$output的值为ARRAY_N,那么用法如下:

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

get_results函数

返回查询的结果集,允许以ARRAY_A、ARRAY_N或者OBJECT三种方式返回。

$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;
}

使用事务

// 事务 - 开始
$wpdb->query("START TRANSACTION");


// 事务 - 提交
$wpdb->query("COMMIT");


// 事务 - 回滚
$wpdb->query("ROLLBACK");

例子:

try {
    $wpdb->query("START TRANSACTION");

    $order = [];
    $wpdb->insert( $wpdb->prefix.'rt_order', $order, ['%d']);
    if(!$wpdb->insert_id){
        throw new Exception("插入订单失败");
    }
    
    foreach($order_items_arr as $k=>$v){
        $v['order_id'] = $order_id;
        $wpdb->insert( $wpdb->prefix.'rt_order_item', $v, ['%d','%s','%d','%s','%d','%d'] );
    }
    
    $wpdb->query("COMMIT");
    return $response;
} catch (Exception $e) {
    echo 'Error message: ' .$e->getMessage();
    $wpdb->query("ROLLBACK");
}

其他

另外还有两个常量:SAVEQUERIES和WP_DEBUG。设置SAVEQUERIES常量为TRUE,可以把在里执行的所有查询及其停止时间保存到$this->queries这个数组中,以后调试的时候可以使用;而设置WP_DEBUG常量为TRUE,则可以输出错误。不过,这两个常量开关默认都没有打开,我们在测试的时候,可以在wp_config.php文件中将其开启。

官方文档:https://developer.wordpress.org/reference/classes/wpdb

收藏
打赏
WordPress 简介
上一篇
WordPress 语言文件
下一篇

发表评论

像素鱼丸
147 文章
0 评论
4 喜欢
最新文章

详解 WordPress 的评论设置

好的,我们来详细梳理并总结 WordPress 中关于文章评论的两个核心控制层级:全局设置和单篇设置。理解这两者的关系(优先级)是管理网站评论的关键。 1. 全局设置 (Global Settings) —— 网站的“默认规则” 这是整个网站评论系统的总开关和默认行为准则。它决定了新发布的文章默认是什么样子的。 位置:WordPress 后台仪表盘 -> 设置 (Settings) -> […]

wp_handle_comment_submission 函数

wp_handle_comment_submission() 是 WordPress 中用于处理评论提交的核心函数之一。它通常在用户提交评论时被调用,负责验证和处理评论数据,并最终将评论插入到数据库中。 ✅ 函数作用 wp_handle_comment_submission() 的主要功能是: 验证用户提交的评论数据(如评论内容、用户名、邮箱等) 检查是否为垃圾评论(通过 Akismet 或其他过 […]

Mirage 主题 v2.89.0 发布

Mirage 主题 v2.89.0 发布 feat 懒加载图片增加灰色背景颜色 refactor 移除一些无用的js文件 fix 优化卡片列表样式 feat 如果设置里删除logo,就直接显示网站名称 fix 修复pc下拉菜单宽度的一个样式bug fix 修复未登录用户取消喜欢时产生的一个错误 fix 优化 wp_vt_star 表结构 下载地址:https://gitee.com/vthemec […]

WordPress set_transient()使用方法和实现

set_transient() 是 WordPress 中用于设置临时数据的函数,它允许你将数据存储在缓存中,这些数据会在指定的时间后自动过期。它是 WordPress 提供的 transient API 的一部分,常用于缓存数据库查询、API 响应或其他计算密集型操作的结果。 一、基本概念 1. 什么是 Transient? Transient 是 WordPress 中的一种缓存机制,类似于 […]
生成中...
扫描二维码
扫描二维码
用户登录