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

本文实例讲述了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 '

'; 
 

echo 'Connection failed:' . $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;

}

}

结果

cd81600d12f1b670ad694e5fd70d2174.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值