因為Yaf是一個純天然的MVC闊架,本人還在貝銳的時候就和主管一起用Yaf框架去重構了向日葵的網(wǎng)站端,到后面,Yaf也逐漸應用到了其他項目上,但是Yaf是沒有帶DB類庫的,所以本人也共享下最近封裝的代碼!
class Db_Mysql
{
private $_options = array();
private $db;
private $statement;
private $_fetchMode = 2;
/**
* 構造函數(shù)
*
* @param string $host
* @param string $username
* @param string $password
* @param string $dbname
* @param string $charset
*/
private function __construct($host, $username, $password, $dbname, $charset)
{
//初始化數(shù)據(jù)連接
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;
}
/**
* 獲取多條數(shù)據(jù)
*
* @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;
}
/**
* 獲取單條數(shù)據(jù)
*
* @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;
}
/**
* 獲取統(tǒng)計或者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;
}
/**
* 關閉數(shù)據(jù)庫操作
*/
public function close()
{
$this->_db = null;
}
}
更多關于php框架相關內容感興趣的讀者可查看本站專題:《php優(yōu)秀開發(fā)框架總結》、《codeigniter入門教程》、《ThinkPHP入門教程》、《Zend FrameWork框架入門教程》、《php面向對象程序設計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》