PHP数据库处理类
在WEB应用程序开发数据库操作类是一个必不可少的东西了,当然大家可以直接连接数据库进行查询,但这样维护不方便,下面我整理了一个不错的PHP数据库处理类与各位分享.
最近在看后盾网的php视频,主要内容是相关制作一个博客系统,感觉还是很有收获,简单的数据库处理类,下面是其中讲到的一个简单的数据库处理类,请见源码:
<?php /** * Created by JetBrains PhpStorm. * User: YangLiu * Date: 2013-7-12 * Time: 下午6:19 * Description:这是一个简单的数据库操作类,便于快速向数据库插入数据、删除数据,更新数据 */ class db { //数据库连接 protected $mysqli ; //表名 protected $table ; //选项 protected $opt ; /*** * 构造方法 * @param $tab_name */ function __construct( $tab_name ){ $this ->config( $tab_name ); } // 配置方法 protected function config( $tab_name ){ $this ->db= new mysqli(DBHOST,DBUSER,DBPWD,DBNAME); //DBFIX为数据库表前缀 $this ->table = DBFIX. $tab_name ; if (mysqli_connect_errno()){ echo "数据库连接错误" .mysqli_connect_errno(); exit (); } $this ->db->query( "SET NAMES 'GBK'" ); //给opt数组设置初始值 $this ->opt[ 'field' ] = '*' ; $this ->opt[ 'where' ]= $this ->opt[ 'order' ]= $this ->opt[ 'limit' ]= $this ->opt[ 'group' ] = '' ; } // 获得当前表字段 function tbFields(){ $result = $this ->db->query( "DESC {$this->table}" ); $fieldArr = array (); while (( $row = $result ->fetch_assoc())!=false){ $fieldArr [] = $row [ 'Field' ]; } return $fieldArr ; } // 获得查询字段 function field( $field ){ $fieldArr = is_string ( $field )? explode ( "," , $field ): $field ; if ( is_array ( $fieldArr )){ $field = '' ; foreach ( $fieldArr as $v ){ $field .= '`' . $v . '`' . ',' ; } } return rtrim( $field , ',' ); } // SQL条件方法 function where( $where ){ $this ->opt[ 'where' ] = is_string ( $where ) ? "WHERE " . $where : '' ; return $this ; } //limit方法 function limit( $limit ){ $this ->opt[ 'limit' ] = is_string ( $limit ) ? "LIMIT " . $limit : '' ; return $this ; } //排序方法 function order( $order ){ $this ->opt[ 'order' ] = is_string ( $order ) ? "ORDER BY " . $order : '' ; return $this ; } // 分组GROUP BY function group( $group ){ $this ->opt[ 'group' ] = is_string ( $group ) ? 'GROUP BY' . $group : '' ; return $this ; } //SELECT function select(){ $sql = "SELECT { $this ->opt[ 'field' ]} FROM { $this ->table} { $this ->opt[ 'where' ]} { $this ->opt[ 'group' ]} { $this ->opt[ 'limit' ]} { $this ->opt[ 'order' ]} "; return $this ->sql( $sql ); } //DELETE方法 function delete ( $id = '' ){ if ( $id == '' && empty empty ( $this ->opt[ 'where' ])){ die ( '查询条件不能为空' ); } if ( $id != '' ){ if ( is_array ( $id )){ $id = implode( ',' , $id ); } $this ->opt[ 'where' ] = "WHERE id IN (" . $id . ")" ; } $sql = "DELETE FROM {$this->table} {$this->opt['where']} {$this->opt['limit']}" ; //echo $sql."<br/>"; return $this ->query( $sql ); } //查阅单条记录 function find( $id ){ $sql = "SELECT {$this->opt['field']} FROM {$this->table} WHERE `id` = {$id}" ; //echo $sql.'<br>'; return $this ->sql( $sql ); } // 添加数据 function insert( $args ){ is_array ( $args ) or die ( '参数非数组' ); $fields = $this ->field( array_keys ( $args )); $values = $this ->values( array_values ( $args )); $sql = "INSERT INTO {$this->table} ({$fields}) VALUES($values)" ; if ( $this ->query( $sql )>0){ return $this ->db->insert_id; } return false; } // 更新UPDATE function update( $args ){ is_array ( $args ) or die ( "参数非数组" ); if ( empty empty ( $this ->opt[ 'where' ])) die ( "条件不能为空" ); $set = '' ; $gpc = get_magic_quotes_gpc(); while (list( $k , $v ) = each( $args )){ $v = ! $gpc ? addslashes ( $v ): $v ; $set .= "`{$k}`='" . $v . "'," ; } $set = rtrim( $set , ',' ); $sql = "UPDATE {$this->table} SET $set {$this->opt['where']}" ; return $this ->query( $sql ); } // 统计所有记录数 function count ( $tabname = '' ){ $tabname = $tabname == '' ? $this ->table: $tabname ; $sql = "SELECT `id` FROM {$tabname} {$this->opt['where']}" ; //echo $sql.'<br/>'; return $this ->query( $sql ); } // 数据数组转为字符串格式,同时进行转议 protected function values( $value ) { if (! get_magic_quotes_gpc ()) { $strValue = '' ; foreach ( $value as $v ) { $strValue .= "'" . addslashes ( $v ) . "'," ; } } else { foreach ( $value as $v ) { $strValue .= "'$v'," ; } } return rtrim ( $strValue , ',' ); } // 获得结果集 function sql( $sql ) { $result = $this ->db->query( $sql ) or die ( $this ->dbError()); $resultArr = array (); while (( $row = $result ->fetch_assoc())!=false){ $resultArr [] = $row ; } return $resultArr ; } // 没有结果集的SQL function query( $sql ){ $this ->db->query( $sql ) or die ( $this ->dbError()); return $this ->db->affected_rows; } //开源代码phpfensi测试数据 // 返回错误 function dbError(){ return $this ->db->error; } } ?>以上是一个简单的PHP数据库处理类,就它的使用特地做个说明,下面对以上代码中的部分相常量和变量作以说明:
$mysqli:对当前数据库的链接引用
$table:当前数据库的表名
$opt:当前数据库的表的所有字段名
DBFIX:数据库配置中的常量[表前缀]
DBHOST:数据库主机
DBFIX:数据库用户名
DBPWD:数据库密码
DBNAME:数据库名称
数据库处理类的使用方法,配置数据库处理类,在使用数据库处理类之前,你必须有一个相关的配置文件,下面我就写一个connect.php文件,文件内容如下所示:
<?php /** * Created by JetBrains PhpStorm. * User: YangLiu * Date: 2013-7-14 * Time: 下午2:15 * Description:数据库配置文件 */ define( "DBHOST" , 'localhost' ); //定义数据库服务器连接地址 define( "DBUSER" , 'root' ); //数据库用户名 define( "DBPWD" , '' ); //数据库密码 define( "DBNAME" , 'blog' ); //定义数据库名 define( "DBFIX" , 'blog_' ); //定义数据库表的前缀 ?>为了让您更简单的理解,我就没有建立更多的目录,把所有的文件全部放在同一目录,如果您觉得不好,也可以自行建立目录,并重新根据情况来调整文件位置.
数据库处理类的使用,使用数据库,你要先引用connect.php和db.class.php文件,下面举一个demo.php文件为例:
<?php /** * Created by JetBrains PhpStorm. * User: LiuYang * Date: 2013-9-15 * Time: 下午10:39 * Description:演示DEMO文件 */ include './config.php' ; //加载配置文件 include './page.class.php' ; //加载数据库处理类 $db = $db = new db( 'blog' ); //链接数据库的表blog_blog ?>输出数据库表的字段名,输出数据库表的字段名,用的tbFields方法,代码如下:
$tbField = $db->tbFields();var_dump($tbField);
其输出结果如下:
array (size=5) 0 => string 'id' (length=2) 1 => string 'btitle' (length=6) 2 => string 'content' (length=7) 3 => string 'status' (length=6) 4 => string 'cid' (length=3)下面,再介绍一个数据库处理类中的相关的另一个方法:
echo $db->field($tbFields);
最后的输出结果:`id`,`btitle`,`content`,`status`,`cid`
统计所有记录数,数据库类中还有一个方法,用来统计数据的所有条数count方法,在我们的分页处理中,它也就会显示得重要了,代码如下:
echo $db->count('blog');
注意: 以上代码是根据id来查阅,其中count方法代码如下:
// 统计所有记录数 function count ( $tabname = '' ){ $tabname = $tabname == '' ? $this ->table: $tabname ; $sql = "SELECT `id` FROM {$tabname} {$this->opt['where']}" ; return $this ->query( $sql ); }数据库的增、删、改、查
数据库的相关操作无外乎就是增、删、改、查,下面对其作以简单介绍.
插入数据
insert方法向数据库中插入数据,其中传入的参数为一个数组,如array('btitle'=>'HdhCmsTestphpfensi测试数据','content'=>'小天地,大世界是一个技术交流博客')。其中数组的键名即为表的字段名,而键值即为想要插入的内容,请看下面的示例:
$inserArr = array('btitle'=>'HdhCmsTestphpfensi测试数据','content'=>'小天地,大世界是一个技术交流博客');$db->insert($inserArr);
删除数据
delete方法是专门来删除数据,为了防止数据被误删,数据删除必须存在一定的限制,比如说通过where、limit方法来作一定的限制,或者你可以直接传入要删除数据的id,你可以查看下面的示例:
//删除id为3的数据 $db -> delete (3); //删除id>5的数据 $db ->where( 'id>5' )-> delete (); //删除从20起后的10条数据 $db ->where( 'id>5' )->limit( '20,10' )-> delete ();更新数据
数据添加了,有时发现错误,就得高法来更改数据,update方法用来更新数据,update方法与insert方法类似,都接受一个数组参数,数组的键名为表的字段名,对应的键值为要插入的内容,下面的内容就是把id为29的数据更新为array中的数据,代码如下:
$db ->where( 'id=29' )->update( array ( 'btitle' => 'HdhCmsTestphpfensi测试数据' , 'content' => '小天地,大世界是一个技术交流博客' )); //更新id>35的所有数据 $db ->where( 'id>29' )->update( array ( 'btitle' => 'HdhCmsTestphpfensi测试数据' , 'content' => '小天地,大世界是一个技术交流博客' ));查找数据
数据库处理类中提供了select方法,可以很方便的进行数据的查找,结合着where、limit方法,就可以查找相应的数据,具体的使用方法请见下例:
$db ->select(); //查找所有数据 $db ->where( 'id=0' )->select(); //查找指定数据 $db ->where( 'id>9' )->select(); //查找id大于9的数据集合 $db ->limit( '10,9' )->select(); //从查找数据第10条以后的9条数据 $db ->where( 'id>50' )->limit( '10,9' )->select();其它方法: 除了以上几种方法之外,数据库处理类还提供了如下的方法.
order方法:主要是来更改查找数据排序方式
group方法:数组方法
find方法:查找单条记录
sql方法:直接执行数据SQL语句,并返回处数据集
query方法:也可以执行数据SQL语句,但不返回数据集,而是返回受影响的记录条数.
关于数据库处理类,最后说明一点,此数据库处理类是后盾网PHP视频中所讲,有助于像我这样的新手来学习,故特地整理.
查看更多关于PHP数据库处理类 - php类库的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did29513