首页 > 语言 > PHP > 正文

Yaf框架封装的MySQL数据库操作示例

2024-05-05 00:07:13
字体:
来源:转载
供稿:网友

本文实例讲述了Yaf框架封装的MySQL数据库操作。分享给大家供大家参考,具体如下:

Yaf封装DB简单操作

介绍

因为Yaf是一个纯天然的MVC阔架,本人还在贝锐的时候就和主管一起用Yaf框架去重构了向日葵的网站端,到后面,Yaf也逐渐应用到了其他项目上,但是Yaf是没有带DB类库的,所以本人也共享下最近封装的代码!

代码

使用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,数据库

 

希望本文所述对大家PHP程序设计有所帮助。


注:相关教程知识阅读请移步到PHP教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选