温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用Yaf框架怎么封装一个MySQL数据库操作类

发布时间:2021-02-25 17:15:43 来源:亿速云 阅读:319 作者:Leah 栏目:开发技术

使用Yaf框架怎么封装一个MySQL数据库操作类?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

使用PDO封装MySQL操作

class Db_Mysql {   private $_options = array();   private $db;   private $statement;   private $_fetchMode = 2;   /**    * 构造函数    *    * @param string $host    * @param string $username    * @param string $password    * @param string $dbname    * @param string $charset    */   private function __construct($host, $username, $password, $dbname, $charset)   {     //初始化数据连接     try {       $dns = 'mysql:dbname=' . $dbname . ';host=' . $host;       $this->db = new PDO($dns, $username, $password, array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_AUTOCOMMIT => 1));       $this->db->query('SET NAMES ' . $charset);     } catch (PDOException $e) {       echo header("Content-type: text/html; charset=utf-8");       echo '<pre />';       echo '<b>Connection failed:</b>' . $e->getMessage();       die;     }   }   /**    * 调用初始化MYSQL连接    *    * @param string $config    * @return Aomp_Db_Mysql    */   static public function getInstance($config = '')   {     $host = $config->host;     $username = $config->username;     $password = $config->password;     $dbname = $config->dbname;     $charset = $config->charset;     $db = new self($host, $username, $password, $dbname, $charset);     return $db;   }   /**    * 获取多条数据    *    * @param string $sql    * @param array $bind    * @param string $fetchMode    * @return multitype:    */   public function fetchAll($sql, $bind = array(), $fetchMode = null)   {     if($fetchMode === NULL){       $fetchMode = $this->_fetchMode;     }     $stmt = $this->query($sql, $bind);     $res = $stmt->fetchAll($fetchMode);     return $res;   }   /**    * 获取单条数据    *    * @param string $sql    * @param array $bind    * @param string $fetchMode    * @return mixed    */   public function fetchRow($sql, array $bind = array(), $fetchMode = null)   {     if ($fetchMode === null) {       $fetchMode = $this->_fetchMode;     }     $stmt = $this->query($sql, $bind);     $result = $stmt->fetch($fetchMode);     return $result;   }   /**    * 获取统计或者ID    *    * @param string $sql    * @param array $bind    * @return string    */   public function fetchOne($sql, array $bind = array())   {     $stmt = $this->query($sql, $bind);     $res = $stmt->fetchColumn(0);     return $res;   }   /**    * 增加    *    * @param string $table    * @param array $bind    * @return number    */   public function insert($table, array $bind)   {     $cols = array();     $vals = array();     foreach ($bind as $k => $v) {       $cols[] = '`' . $k . '`';       $vals[] = ':' . $k;       unset($bind[$k]);       $bind[':' . $k] = $v;     }     $sql = 'INSERT INTO '       . $table       . ' (' . implode(',', $cols) . ') '       . 'VALUES (' . implode(',', $vals) . ')';     $stmt = $this->query($sql, $bind);     $res = $stmt->rowCount();     return $res;   }   /**    * 删除    *    * @param string $table    * @param string $where    * @return boolean    */   public function delete($table, $where = '')   {     $where = $this->_whereExpr($where);     $sql = 'DELETE FROM '       . $table       . ($where ? ' WHERE ' .$where : '');     $stmt = $this->query($sql);     $res = $stmt->rowCount();     return $res;   }   /**    * 修改    *    * @param string $table    * @param array $bind    * @param string $where    * @return boolean    */   public function update($table, array $bind, $where = '')   {     $set = array();     foreach ($bind as $k => $v) {       $bind[':' . $k] = $v;       $v = ':' . $k;       $set[] = $k . ' = ' . $v;       unset($bind[$k]);     }     $where = $this->_whereExpr($where);     $sql = 'UPDATE '       . $table       . ' SET ' . implode(',', $set)       . (($where) ? ' WHERE ' . $where : '');     $stmt = $this->query($sql, $bind);     $res = $stmt->rowCount();     return $res;   }   /**    * 获取新增ID    *    * @param string $tableName    * @param string $primaryKey    * @return string    */   public function lastInsertId()   {     return (string) $this->db->lastInsertId();   }   public function query($sql, $bind = array())   {     if(!is_array($bind)){       $bind = array($bind);     }     $stmt = $this->prepare($sql);     $stmt->execute($bind);     $stmt->setFetchMode($this->_fetchMode);     return $stmt;   }   public function prepare($sql = '')   {     if(empty($sql)){       return false;     }     $this->statement = $this->db->prepare($sql);     return $this->statement;   }   public function execute($param = '')   {     if(is_array($param)){       try {         return $this->statement->execute($param);       } catch (Exception $e) {         return $e->getMessage();       }     }else {       try {         return $this->statement->execute();       } catch (Exception $e) {         return $e->getMessage();       }     }   }   /**    *    * @param string $where    * @return null|string    */   protected function _whereExpr($where)   {     if(empty($where)){       return $where;     }     if(!is_array($where)){       $where = array($where);     }     $where = implode(' AND ', $where);     return $where;   }   /**    * 关闭数据库操作    */   public function close()   {     $this->_db = null;   } }

配置

db.type = 'mysql' db.host = '127.0.0.1' db.username = 'root' db.password = '123456' db.dbname = 'test' db.charset = 'UTF8'

调用方法

class TestController extends Yaf_Controller_Abstract {   public function indexAction()   {     $config = Yaf_Application::app()->getConfig()->db;     $db = Db_Mysql::getInstance($config);     $row = $db->fetchOne('select count(*) from `user`');     print_r($row);die;   } }

结果

使用Yaf框架怎么封装一个MySQL数据库操作类

看完上述内容,你们掌握使用Yaf框架怎么封装一个MySQL数据库操作类的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI