wordpress直接操作数据库的方法
wordpress占据全球40%的网站地位,是世界上使用最活跃的内容管理系统(CRM)。学习成本低,社区活跃等特点使他一直成为草根站长最喜爱的内容管理系统。
wordpress本身由于其强大的功能,让非常多的程序员直接在其之上开发功能强大的系统,比如商城系统,以及一些负责的管理系统。
但是由于wordpress最初就是定位于博客系统,其数据库结构设计的非常的简单,基本上所有的复杂类型数据都只能已文章的形式展示出来。如果数据量大。wordpress那原本的数据表结构就会显得非常不合理。因此默认的wordpress结构原本也不适合百万级别的大数据管理。
如果用户想使用wordpress作为框架开发系统,建议复杂的数据类型全部采用自己建立数据库的方式处理,wordpress有完善的数据库函数,下面我就来介绍一下相关的几个函数。
一、sql语句处理,防止sql注入攻击。
$sql = $wpdb -> prepare("query",[%d,%d,%s])
例如:
$sql = $wpdb -> prepare("SELECT * FROM `user` WHERE `username` = %s AND `password` = %s", $username, $password);
用这种方式,函数可以判断$username与$password是否是纯参数,不能作为执行语句处理。
二、获取单一数据,在一般sql语句就只返回一个数值时使用。
$var = $wpdb -> get_var("query");
例如:
$var = $wpdb -> get_var("SELECT count(*) FROM `user`");
这个函数直接返回值,可以直接使用。
注:其实get_var并不是仅仅只能用于就返回一个数值的sql语句,而是他默认只返回第一行最左边的元素。如果希望他返回其他元素,可以使用get_var("query", x, y)来实现。
三、获取一行数据,在一般sql语句就只返回特定对象时使用。
$sql = $wpdb -> get_row("query", output_type);
例如:
$var = $wpdb -> get_row("SELECT * FROM `user` WHERE `userid` = 1", ARRAY_A);
output_type:三个预定义的常量之一。默认值为OBJECT。
OBJECT —— 返回的结果以对象形式输出
ARRAY_A ——返回的结果以关联数组形式输出
ARRAY_N —— 返回的结果以数值索引数组形式输出
我通常使用OBJECT或是ARRAY_A,访问方式分别为$var -> username(output_type为OBJECT时)或是$var["username"](output_type为ARRAY_A时)
注:其实get_row并不是仅仅只能用于就返回一行的sql语句,而是他默认只返回第一行的集合。如果希望他返回其他行,可以使用get_row("query", output_type, y)来实现。
四、获取一列数据,在一般sql语句就只返回特定属性时使用。
$sql = $wpdb -> get_col("query");
例如:
$var = $wpdb -> get_col("SELECT `age` FROM `user`);
返回的结果以数值索引数组形式输出,一般通过foreach函数分离,或是直接使用$var[1]这样的方式获取。
注:其实get_col并不是仅仅只能用于就返回一列的sql语句,而是他默认只返回第一列的集合。如果希望他返回其他列,可以使用get_col("query", x)来实现。
五、获取多列数据,在一般sql语句就只返回特定属性时使用。
$sql = $wpdb -> get_results("query", output_type);
例如:
$vars = $wpdb -> get_results("SELECT * FROM `user`, ARRAY_A);
返回的结果以数值索引数组形式包其他形式输出,一般通过foreach函数分离,或是直接使用$var[1]这样的方式获取。获取的对象受第二个参数控制
output_type:三个预定义的常量之一。默认值为OBJECT。
OBJECT —— 返回的结果以对象形式输出
ARRAY_A ——返回的结果以关联数组形式输出
ARRAY_N —— 返回的结果以数值索引数组形式输出
我通常使用OBJECT或是ARRAY_A,访问方式分别为$var -> username(output_type为OBJECT时)或是$var["username"](output_type为ARRAY_A时)
例如
foreach($vars as $var) {
echo $var["username"];//output_type是ARRAY_A时
}
六、插入新数据
$id = $wpdb -> insert("table_name", array(), array(%s, %d));
例如:
$id = $wpdb -> insert("table_name", array("username" => $username,"password" => $password, "age" => $age), array("%s", "%s", "%d"));
第一个参数是将要写入的数据以数组形式插入。第二个参数是申明插入的数据类型,同时也有一定的反sql注入式攻击的效果。返回值为新建的那条数据的主键。
七、更新新数据
$id = $wpdb -> update("table_name", array(), array(),array(%s, %d), array(%s, %d));
例如:
$id = $wpdb -> update("table_name", array("username" => $username, "password" => $password, "age" => $age), array("ID" => $ID), array("%s", "%s", "%d"), array("%d"));
第一个参数是将要写入的数据以数组形式插入。第二个参数是过滤条件,也就是sql语句中where后的参数。第三个参数是要更新数据的数据类型,第四个参数是过滤条件的数据类型。返回值为更新的那条数据的主键。
八、删除数据
$id = $wpdb -> delete("table_name", array(), array(%s, %d));
例如:
$id = $wpdb -> update("table_name", array("ID" => $ID), array("%d"));
第一个参数是过滤条件,也就是sql语句中where后的参数。第二个参数是过滤条件的数据类型。返回值为删除的数目。
通过上述函数直接对数据库操作,可以大大提高系统的运行速度,让wordpress也适合开发大型系统。