WordPress 查询数据库 操作数据库

插件位置

需要注意的是,由于在WordPress中可以配置wp-content/plugins/目录的位置,所以你必须使用plugin_dir_path()plugins_url()两个函数来获取插件的路径。

WordPress 查询数据库

查询

Python
global $wpdb; $fivesdrafts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_author = 1"); foreach ($fivesdrafts as $fivesdraft) { echo $fivesdraft->ID." ".$fivesdraft->post_title."<br>"; } die();
1
2
3
4
5
6
7
8
global $ wpdb ;
$ fivesdrafts = $ wpdb -> get_results ( "SELECT ID, post_title FROM $wpdb->posts
    WHERE post_status = 'publish' AND post_author = 1" ) ;
foreach ( $ fivesdrafts as $ fivesdraft ) {
     echo $ fivesdraft -> ID . "  " . $ fivesdraft -> post_title . "<br>" ;
}
die ( ) ;
 

输出:

WordPress是一个非常强大的内容管理系统,非常适合搭建CMS网站,也非常适合二次开发。

本文就为大家介绍一下,在二次开发中非常重要的一个环节–数据库操作。

wpdb类

为了方便二次开发,WordPress封装了一个非常友好的数据库操作类:wpdb

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

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

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

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

query函数

这个函数是最基本的操作函数,$query为SQL语句,提交给数据库执行,结果分两种情况:

1). 如果是insert|delete|update|replace, 返回受影响行数,在insert|replace这种情况下,该函数会用$this->insert_id记录下新插入的ID。

2). 如果是“select”,该会用$this->last_result记录下查询到结果集,返回查询到的记录行数。

如果出错,则返回FALSE。

实例:

Python
<?php $wpdb->query( " UPDATE $wpdb->posts SET post_parent = 7 WHERE ID = 15 AND post_status = 'static' " ); ?>
1
2
3
4
5
6
7
8
9
10
<?php
$wpdb -> query (
     "
    UPDATE $wpdb->posts
    SET post_parent = 7
    WHERE ID = 15 AND post_status = 'static'
    "
) ;
?>
 

escape函数

使用反斜线引用数据,也就是使用魔术引号。

实例:

Python
<?php $name = $wpdb->escape($name); $email = $wpdb->escape($email); $wpdb->query("INSERT INTO myusers (id, name, email) VALUES (NULL, '$name', '$email')"); ?>
1
2
3
4
5
6
<?php
$name = $wpdb -> escape ( $name ) ;
$email = $wpdb -> escape ( $email ) ;
$wpdb -> query ( "INSERT INTO myusers (id, name, email) VALUES (NULL, '$name', '$email')" ) ;
?>
 

insert函数

这是插入记录函数,第一个参数是表的字段数组,第二个是数据数组,第三个用于规定$data中每个值的数据类型。插入数据返回1,否则为0。

示例:

Python
<? $wpdb->insert( 'table', array( 'column1' => 'value1', 'column2' => 123 ), array( '%s', '%d' ) ); ?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$wpdb -> insert (
     'table' ,
     array (
         'column1' = > 'value1' ,
         'column2' = > 123
     ) ,
     array (
         '%s' ,
         '%d'
     )
) ;
?>
 

update函数

这是更新记录函数,第一个参数是表的字段数组,第二个是数据数组,第三个是条件数组,第四个和第五个分别用于规定$和$where中每个值的数据类型。更新了为1,否则为0。

实例:

Python
<?php $wpdb->update( 'table', array( 'column1' => 'value1', // string 'column2' => 'value2' // integer (number) ), array( 'ID' => 1 ), array( '%s', // value1 '%d' // value2 ), array( '%d' ) ); ?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$wpdb -> update (
     'table' ,
     array (
         'column1' = > 'value1' ,    // string
         'column2' = > 'value2'    // integer (number)
     ) ,
     array ( 'ID' = > 1 ) ,
     array (
         '%s' ,    // value1
         '%d'      // value2
     ) ,
     array ( '%d' )
) ;
?>
 

get_var函数

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

实例:

Python
<? $user_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->users;") ); echo "<p>User count is {$user_count}</p>"; ?>
1
2
3
4
5
<?
$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,那么用法如下:

Python
<?php $mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10"); echo $mylink->link_id; // prints "10" ?>
1
2
3
4
5
<?php
$mylink = $wpdb -> get_row ( "SELECT * FROM $wpdb->links WHERE link_id = 10" ) ;
echo $mylink -> link_id ; // prints "10"
?>
 

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

Python
<?php $mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10",ARRAY_A); echo $mylink['link_id']; // prints "10" ?>
1
2
3
4
5
<?php
$mylink = $wpdb -> get_row ( "SELECT * FROM $wpdb->links WHERE link_id = 10" , ARRAY_A ) ;
echo $mylink [ 'link_id' ] ; // prints "10"
?>
 

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

Python
<?php $mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10",ARRAY_N); echo $mylink[1]; // prints "10" ?>
1
2
3
4
5
<?php
$mylink = $wpdb -> get_row ( "SELECT * FROM $wpdb->links WHERE link_id = 10" , ARRAY_N ) ;
echo $mylink [ 1 ] ; // prints "10"
?>
 

get_col函数

返回一列,$x指定第几列。

实例:

Python
<? $names = $wpdb->get_col("SELECT name, email FROM myusers", 0) foreach ( $names as $name ) { echo $name; } ?>
1
2
3
4
5
6
7
<?
$names = $wpdb -> get_col ( "SELECT name, email FROM myusers" , 0 )
foreach ( $names as $name ) {
     echo $name ;
}
?>
 

get_results函数

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

Python
<?php $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; } ?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$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 ;
}
?>
 

get_col_info函数

返回字段信息。

Python
<?php $col_name = $wpdb->get_col_info('name', 0); echo $col_name; ?>
1
2
3
4
5
<?php
$col_name = $wpdb -> get_col_info ( 'name' , 0 ) ;
echo $col_name ;
?>
 

prepare函数

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

用法:

Python
<?php $sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ...] ); ?>
1
2
<?php $sql = $wpdb -> prepare ( 'query' [ , value_parameter , value_parameter . . . ] ) ; ?>
 

实例:

Python
<? $metakey = "Harriet's Adages"; $metavalue = "WordPress' base 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 ) ); ?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
$metakey      = "Harriet's Adages" ;
$metavalue    = "WordPress' base 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
) ) ;
?>
 

其他

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




  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值