开 发dz3.0插件的朋友都知道,在开发插件中,大部分插件都要涉及到数据库的操作,而官方提醒开发插件要尽量用官方提供的数据库操作函数,但是我在网上找 了很多资料,都没有看到数据库操作函数的一些具体说明,不得已只能自己看函数,算是对数据库操作函数有了点基本了解,今天我就给大家分享出来。
首先我要来介绍2个文件
【1】/source/class/db/db_driver_mysql.php 内部SQL处理库 文件里类为(db_driver_mysql)
【2】/source/class/discuz/discuz_database.php 全局SQL语句处理类 文件里类为(discuz_database)
我们用到的数据库操作函数基本是第【2】 个文件中里的函数,而第【2】 个文件中的函数有好些是来自第【1】 个文件函数,只是重新封装了下
在开发插件中我们常用到的函数是来自第【2】 个文件,废话不多说了,来说明函数吧。
注意提示:下边发遇到pre_都为dz数据表前缀
table($table)
参数:$table---数据库表名称
作用:给表加前缀,如数据库表名称为common_cron,调用函数会在表前添加安装dz时所填写的数据表前缀,如pre_common_cron
本函数是将db_driver_mysql类中的table_name($tablename)函数重新封装
delete($table, $condition, $limit = 0, $unbuffered = true)
参数:$table---数据库表名称
$condition---可以是数字也可以是变量,存放where条件语句,为数组的时候比较复杂,一般都说是为变量,直接 存放where条件
作用:按where条件删除$table表里的对应数据
-
- 实例讲解:删除pre_com数据表中id为1的记录
-
- $table="com";
-
- $condition="id=1";
-
- DB::delete($table, $condition, $limit = 0, $unbuffered = true)
insert($table, $data, $return_insert_id = false, $replace = false, $silent = false)
参数:$table---数据库表名称
$data---数组,如要在$table 中的title和content字段中插入“标题”和“内容”,$data的值可以为
$data=array(“title”=>"标题",“content”=>"内容")
注意:MySQL 3.22.10或以后版本才可以使用此函数
作用:插入数据,如果$replace参数设置为true,改函数功能可以验证数据是否存在,不存在插入,存在更新记录,$return_insert_id参数设置为true将返回新插入的记录ID
-
- 实例讲解:在pre_com中的title和content字段中插入“标题”和“内容”
-
- $table="com";
-
- $data=array("title"=>"标题","content"=>"内容")
-
- DB::insert($table, $data, $return_insert_id = false, $replace = false, $silent = false)
update($table, $data, $condition, $unbuffered = false, $low_priority = false)
参数:
$table---数据库表名称
$data---数组,如要更新$table 中的title和content字段为“标题”和“内容”,$data的值可以为$data=array(“title”="标题",“content”="内容")
$condition---可以是数字也可以是变量,存放where条件语句,为数组的时候比较复杂,一般都说是为变量,直接 存放where条件
作用:
更新数据表中的记录
-
- 实例讲解:在表pre_com中更新id为1的title和content字段值为“标题”和“内容”
-
- $table="com";
-
- $data=array("title"=>"标题","content"=>"内容");
-
- $condition="id=1";
-
- DB::update($table, $data, $condition, $unbuffered = false, $low_priority = false)
insert_id()作用:
返回前次插入记录的ID
是对db_driver_mysql种函数insert_id()重新封装
函数原型
-
- function insert_id()
-
- {
-
- return ($id = mysql_insert_id($this->curlink)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
-
- }
fetch($resourceid, $type = MYSQL_ASSOC)
参数:
$resourceid-是mysql_query($SQL) 的返回值,或者是dz定义函数query()的返回值
作用:
结果集中取得一行作为关联数组,或数字数组,或二者兼有,相当于执行php中mysql_fetch_array(data,array_type)函数
是将db_driver_mysql类中fetch_array函数重新封装
-
- 函数原型为
-
- function fetch_array($query, $result_type = MYSQL_ASSOC) {
-
- return mysql_fetch_array($query, $result_type);
-
- }
-
- fetch函数原型为
-
- public static function fetch($resourceid, $type = MYSQL_ASSOC) {
-
- return self::$db->fetch_array($resourceid, $type);
-
- }
fetch_first($sql, $arg = array(), $silent = false)
参数:
$sql-要执行的sql语句
作用:获取集合中的第一条记录
-
- $sql=“select * from table ”;
-
- $n=fetch_first($sql)
-
- 以上功能就相当于
-
- $sql=“select * from table ”;
-
- $query=mysql_query($sql)
-
- $n=mysql_fetch_array($sql);
fetch_all($sql, $arg = array(), $keyfield = '', $silent=false)
参数:
$sql-要执行的sql语句
作用:获取集合中的全部记录
-
- $sql=“select * from table ”;
-
- $n[]= DB::fetch_all ($sql)
-
- 以上功能相当于
-
- $sql=“select * from table ”;
-
- $query=mysql_query($sql)
-
- while ($row = self::$db->fetch_array($query))
-
- {
-
- $n[] = $row;
-
- }
result($resourceid, $row = 0)
参数:
$resourceid-是mysql_query($SQL) 的返回值,或者是dz定义函数query()的返回值
$row-或者那一行的字段值
作用:
获取记录集中某个字段的值
-
- 执行此函数相当于执行php中mysql_result($query, $row)函数
query($sql, $arg = array(), $silent = false, $unbuffered = false)
参数:$sql-要执行的sql语句
作用:
执行一条sql语句
如果sql语句为“select .....”函数返回记录集,如果为“UPDATE或者DELETE”函数返回操作所影响的记录条数,如果为“INSERT”函数返回新插入记录的id
执行query($sql)函数类似执行php中mysql_query($sql)
num_rows($resourceid)
参数:
$resourceid-是mysql_query($SQL) 的返回值,或者是dz定义函数query()的返回值
作用:
返回记录条数
执行num_rows($query)相当于执行php中mysql_num_rows($query);
affected_rows()
作用:
返回上次操作所影响的记录条数
执行affected_rows()相当于执行php中mysql_affected_rows()
本贴原文来自:http://www.cms97.com/read.php?tid=37