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