博客列表 >DAOMySQLi工具类

DAOMySQLi工具类

潜轲的博客
潜轲的博客原创
2017年08月22日 23:04:031083浏览

<?php
//使用三私一公的单例模式实现DAOMySQLi工具类
class DAOMySQLi
{
   private $host;
   private $user;
   private $pass;
   private $dbname;
   private $port;
   //保存mysqli对象
   private $MySQLi;
   //一个私有静态属性
   private static $instance;
   //私有构造方法
   private function __construct($options)
   {
       $this->host = $options['host'];
       $this->user = $options['user'];
       $this->pass = $options['pass'];
       $this->dbname = $options['dbname'];
       $this->port = $options['port'];

       $this->MySQLi = new MySQLi($this->host,$this->user,$this->pass,$this->dbname,$this->port);
       //设置字符集
       $this->MySQLi->query('SET NAMES UTF8;');
   }
   //私有克隆方法
   private function __clone(){}
   //公有方法
   public static function getSingleton($options)
   {
       //判断一下实例化的对象是否为这个类的
       if(!self::$instance instanceof self)
       {
           self::$instance = new self($options);
       }
       return self::$instance;
   }
   //查询所有语句
   public function fetchAll($sql)
   {
       //执行语句
       $res = $this->MySQLi->query($sql);
       if($res)
       {
           $rows = [];
           while($row = $res->fetch_assoc())
           {
               $rows[] = $row;
           }
           //清空结果集
           $res->free();
           return $rows;
       }
       else
       {
           //说明sql语句有误
           echo 'SQL语句有误,详细信息如下:<br>'.$this-> MySQLi -> error;
           exit();
       }

   }
   //查询一条语句
   public function fetchOne($sql)
   {
       //执行语句
       $res = $this->MySQLi->query($sql);
       if($res)
       {
           $row = $res->fetch_assoc();
           $res->free();
           return $row;
       }
       else
       {
           //说明sql语句有误
           echo 'SQL语句误,详细信息如下:<br>'.$this-> MySQLi -> error;
           exit();
       }
   }
   //DML(删除,添加,修改)语句
   public function DML($sql)
   {
       $res = $this->MySQLi->query($sql);
       if($res)
       {
           $affected_rows = $this->MySQLi->affected_rows;
           if($affected_rows>0)
           {
               return true;
           }
           else
           {
               return false;
           }
       }
       else
       {
           //说明sql语句有误
           echo 'SQL语句有误,详细信息如下:<br>'.$this-> MySQLi -> error;
           exit();
       }
   }
}


总结:使用单例模式使连接数据库的对象不能重复实例化,提高效率。通过将sql语句封装到类的方法中在外实例化后,可以调用该方法,来执行,大大减少代码。

下面给出查询语句调用示意代码,其他基本类似。

<?php
   require_once './hw_DAOMySQLi.php';
   $options=[
       'host'=>'localhost',
       'user'=>'root',
       'pass'=>'wasd',
       'dbname'=>'stu',
       'port'=>3306
   ];
   $MySQLi = DAOMySQLi::getSingleton($options);
   //sql查询
   $sql = "SELECT * FROM grade;";
   $rows = $MySQLi->fetchAll($sql);
   include_once './stu_lst.html';
?>

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议