PHP封装数据库操作类(链接数据库)

有面向对象技术基础的编程人员看一天就可以写起来了。而PHP在访问数据库的时候又经常会出现各种问题,如字符编码问题、SQL语法错误问题、PHP处理数据记录对象和返回对象的问题等。我这里写了一个数据库操作类,封装了数据库增删添改等操作,很方便使用。用这个类,可以加速网站的后台开发。

优点:

1.方便快捷, 数据库操作只需调用接口;
2.统一编码(utf8),不易导致乱码
3.结构清晰. 如处理前端请求的后台程序(test.php) + 表封装类(user.class.php) + 数据库封装类(db.class.php) + 配置信息(configuration.php)
以下例子有四个文件: configuration.php + db.class.php + user.class.php + test.php,放在同一个目录下。

首先是一个数据库配置的文件类configuration.php

 代码如下 复制代码

<?php
     /**
      * 数据库配置信息
      */
     define('DB_HOST','localhost');            //服务器
     define('DB_USER','root');                 //数据库用户名
     define('DB_PASSWORD','');                 //数据库密码
     define('DB_NAME','test0');                //默认数据库
     define('DB_CHARSET','utf8');              //数据库字符集
     define('TIMEZONE',"PRC");                 //时区设置

?>

接下来就是数据库操作类db.class.php

 代码如下 复制代码
<?php
    require_once("./configuration.php");   //引入配置常量文件
    date_default_timezone_set(TIMEZONE); 
 
 /**
  * 类名:DB
  * 说明:数据库操作类
  */
 class DB
 {
  public $host;            //服务器
  public $username;        //数据库用户名
  public $password;        //数据密码
  public $dbname;          //数据库名
  public $conn;            //数据库连接变量
  
  /**
   * DB类构造函数
   */
  public function DB($host=DB_HOST ,$username=DB_USER,$password=DB_PASSWORD,$dbname=DB_NAME)
  {
   $this->host = $host;
   $this->username = $username;
   $this->password = $password;
   $this->dbname = $dbname;
   
  }
  /**
   * 打开数据库连接
   */
  public function open()
  {
   $this->conn = mysql_connect($this->host,$this->username,$this->password);
   mysql_select_db($this->dbname);
   mysql_query("SET CHARACTER SET utf8");
  }
  /**
   * 关闭数据连接
   */
  public function close()
  {
   mysql_close($this->conn);
  }
  /**
   * 通过sql语句获取数据
   * @return: array()
   */
  public function getObjListBySql($sql)
  {
   $this->open();
   $rs = mysql_query($sql,$this->conn);
   $objList = array();
   while($obj = mysql_fetch_object($rs))
   {
    if($obj)
    {
     $objList[] = $obj;
    }
   }
   $this->close();
   return $objList;
  }
  
     /**
   * 向数据库表中插入数据
   * @param:$table,表名
   * @param:$columns,包含表中所有字段名的数组。默认空数组,则是全部有序字段名
   * @param:$values,包含对应所有字段的属性值的数组
   */
  public function insertData($table,$columns=array(),$values=array())
  {
   $sql = 'insert into '.$table .'( ';
   for($i = 0; $i < sizeof($columns);$i ++)
   {
    $sql .= $columns[$i];
    if($i < sizeof($columns) - 1)
    {
     $sql .= ',';
    }
   }
   $sql .= ') values ( ';
   for($i = 0; $i < sizeof($values);$i ++)
   {
    $sql .= "'".$values[$i]."'";
    if($i < sizeof($values) - 1)
    {
     $sql .= ',';
    }
   }
   $sql .= ' )';
   $this->open();
   mysql_query($sql,$this->conn);
   $id = mysql_insert_id($this->conn);
   $this->close();
   return $id;
  }
  
  /**
   * 通过表中的某一属性获取数据
   */
  public function getDataByAtr($tableName,$atrName,$atrValue){
   @$data = $this->getObjListBySql("SELECT * FROM ".$tableName." WHERE $atrName = '$atrValue'");
   if(count($data)!=0)return $data;
   return NULL; 
   }
  /**
   * 通过表中的"id",删除记录
   */
   public function delete($tableName,$atrName,$atrValue){
    $this->open();
    $deleteResult = false;
    if(mysql_query("DELETE FROM ".$tableName." WHERE $atrName = '$atrValue'")) $deleteResult = true;
    $this->close();
    if($deleteResult) return true;
    else return false;
    }
  /**
   * 更新表中的属性值
   */
   public function updateParamById($tableName,$atrName,$atrValue,$key,$value){
    $db = new DB();
    $db->open();
    if(mysql_query("UPDATE ".$tableName." SET $key = '$value' WHERE $atrName = '$atrValue' ")){  //$key不要单引号
     $db->close();
     return true;
    }
    else{
     $db->close();
     return false;
    }
   }
  /*
   * @description: 取得一个table的所有属性名
   * @param: $tbName 表名
   * @return:字符串数组
   */
  public function fieldName($tbName){
   $resultName=array();
   $i=0;
   $this->open();
   $result = mysql_query("SELECT * FROM $tbName");
   while ($property = mysql_fetch_field($result)){
    $resultName[$i++]=$property->name;
    }
   $this->close();
   return $resultName;
      }
 }
 ?>

接下来是测试了。我在phpmyadmin中建了一个test0数据库,里面建一张表user。然后用php写一个user类对应数据库中的user表。

user.class.php

 代码如下 复制代码

<?php

     require_once("./db.class.php");
 
  class User{
   public $name = NULL;
   public $password = NULL;
  
   /**
    * 构造函数
    */
   public function __construct($name,$password){
    $this->name = $name;
    $this->password = $password;
    }

   public function insert(){
    $db = new DB();
       $resultid = $db->insertData("user",array(),array('',$this->name,$this->password)); 
       return $resultid;
    }
  
   public static function getUserById($uid){
     $db = new DB();
     return $db->getDataByAtr("user",'uid',$uid);
     }
 
   public static function getUserByName($name){
     $db = new DB();
     @$data = $db->getObjListBySql("SELECT * FROM user WHERE name = '$name'");
     if(count($data)!=0)return $data;
     else return null;
     }

   public static function getAllUser(){
     $db = new DB();
      @$data = $db->getObjListBySql("SELECT * FROM user");
      if(count($data)!=0) return $data;
      else return null;
     }
    
   public static function deleteByUid($uid){
     $admin = Admin::getAdminById($uid);
     $db = new DB();
     if($db->delete("user","uid",$uid)) return true;
     else return false;
     }
   } 
  
?>

测试程序: test.php

 代码如下 复制代码

<?php
    header("Content-Type:text/html; charset=utf8");

 require_once("./user.class.php");

 $user = new User("HelloWorld","123456");
 $user->insert();

 $users = User::getAllUser();

 foreach ($users as $u) {
  echo "<br/>".$u->name."<br/>".$u->password."<br/>";
 }
?>

时间: 2024-10-14 04:58:43

PHP封装数据库操作类(链接数据库)的相关文章

一个ASP.NET的MYSQL的数据库操作类自己封装的_实用技巧

/** * 类说明:对MYSQL数据库的操作类 */ using System; using System.Data; using MySql.Data.MySqlClient; namespace Niunan.BYLW.Utility { /// <summary>对MYSQL数据库的操作类 /// /// </summary> public class MYSQLHelper { private MySqlConnection conn = null; private MyS

自己封装的ASP.NET的MYSQL的数据库操作类

代码 /** * 作者:牛腩 * 创建时间:2010年3月7日17时35分 * 类说明:对MYSQL数据库的操作类 */ using System;using System.Data;using MySql.Data.MySqlClient; namespace Niunan.BYLW.Utility{    /// <summary>对MYSQL数据库的操作类    ///     /// </summary>    public class MYSQLHelper    {  

[原创] EasyASP v1.5简化ASP开发,包含数据库操作类

EasyASP v1.5简化ASP开发,包含数据库操作类 EasyASP是一个方便快速开发ASP的类,其中包含了一个数据库控制类(原clsDbCtrl.asp,对原代码作了优化和修改,包含对数据库的各类操作及存储过程的调用,全部封装在Easp.db中,使用起来会更方便,调用也更简单).而Easp类中提供了大量实用的ASP通用过程及方法,可以简化大部分的ASP操作.目前只提供了VBScript版,JScript版将来可能会提供.详细说明请下载帮助手册,里面有非常详细的使用方法说明及源码范例. 源码

数据库操作类mysql/mysqli/pdo

PDO,MySQL,MYSQLI的各自不同介绍,PDO,MYSQL,MYSQLI 性能哪个比较好 普通的mysql连接肯定是会被抛弃的 因为每次都要防止sql注入的问题 而且相对来说比较慢 首先, mysqli 连接是永久连接,而mysql是非永久连接 .什么意思呢? mysql连接每当第二次使用的时候,都会重新打开一个新的进程,而mysqli则只使用同一个进程,这样可以很大程度的减轻服务器端压力. mysqli是在普通mysql的基础上做的一次优化说实话很成功 预处理方式完全解决了sql注入的

php pdo mysql数据库操作类

原文:php pdo mysql数据库操作类   findAll(array( 'field'=>'ID,albumName,albumImage, mainActor,directors,tags,info,area, keywords,wflag,year,mod_version,totalDuration', 'where'=>$where, 'order'=>'flag desc,hit_count desc', 'limit'=>"{$limit['offset

php实现可用于mysql,mssql,pg数据库操作类_php技巧

本文实例讲述了可用mysql,mssql,pg三种数据库的数据库操作类,你只要作任何修改就可以方便的改变你数据库的类型.分享给大家供大家参考.具体分析如下: 函数清单,索引: Open:打开数据库连接 Line:71 Close:关闭数据库连接 Line:107 SelectDB:选择数据库 Line:129 Query:创建查询 Line:151 DataSeek:移动记录指针 Line:175 FieldName:获取字段名称 Line:198 FieldType:获取字段类型 Line:2

php面象对象数据库操作类实例_php技巧

本文实例讲述了php面象对象数据库操作类.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: //此处构造一个数据库操作类,封装所有数据库操作 //可以扩展便于后台管理程序的使用 Class MySQLDB  {     var $host;     var $user;     var $passwd;     var $database;    var $conn;       //利用构造函数实现变量初始化     //同时连接数据库操作    function MySQLD

PHP简单数据库操作类实例【支持增删改查及链式操作】_php技巧

本文实例讲述了PHP简单数据库操作类.分享给大家供大家参考,具体如下: 在进行项目开发时,数据库是必不可少的东西了.但是很多时候却又对数据库SQL语句的繁杂而感到头疼.提供一个我自己使用的数据库操作类(模型Model),供大家使用.支持增.删.改.查,支持链式操作,代码不到100行,非常小巧方便,很适合小项目的快速部署使用. /** * * @Authot: summer * * @E-mail: wenghang1228@me.com * * @Data: 2015-02-06 * * @Pr

强大的php数据库操作类,支持mysql,mssql,pg

本文实例讲述了可用mysql,mssql,pg三种数据库的数据库操作类,你只要作任何修改就可以方便的改变你数据库的类型.分享给大家供大家参考.具体分析如下: 函数清单,索引: Open:打开数据库连接 Line:71 Close:关闭数据库连接 Line:107 SelectDB:选择数据库 Line:129 Query:创建查询 Line:151 DataSeek:移动记录指针 Line:175 FieldName:获取字段名称 Line:198 FieldType:获取字段类型 Line:2