一个简单的PHP数据库处理类php
最近在看后盾网的php视频,主要内容是相关制作一个博客系统,感觉还是很有收获。
简单的数据库处理类
下面是其中讲到的一个简单的数据库处理类,请见源码:
<?php
/**
* Created by JetBrains 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($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($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;
}
// 返回错误
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'=>'www.lyblog.net','content'=>'小天地,大世界是一个技术交流博客')。其中数组的键名即为表的字段名,而键值即为想要插入的内容。请看下面的示例:
$inserArr = array('btitle'=>'www.lyblog.net','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'=>'www.lyblog.net','content'=>'小天地,大世界是一个技术交流博客'));
//更新id>35的所有数据
$db->where('id>29')->update(array('btitle'=>'www.lyblog.net','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
/**
* 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($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($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;
}
// 返回错误
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'=>'www.lyblog.net','content'=>'小天地,大世界是一个技术交流博客')。其中数组的键名即为表的字段名,而键值即为想要插入的内容。请看下面的示例:
$inserArr = array('btitle'=>'www.lyblog.net','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'=>'www.lyblog.net','content'=>'小天地,大世界是一个技术交流博客'));
//更新id>35的所有数据
$db->where('id>29')->update(array('btitle'=>'www.lyblog.net','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数组的声明与遍历
最新评论
热门推荐
我要评论