php pdo数据库封装类,phppdo封装类代码(支持事务)

这是一个PHP类,用于封装PDO数据库操作。它包含了连接、断开、执行SQL、查询、预处理语句等功能,并提供了错误处理。类还支持事务处理,可以获取数据库驱动和版本信息。通过单例模式确保只有一个数据库连接实例。
摘要由CSDN通过智能技术生成

/**

* PDO数据库

* @copyright By GOOGLE

*/

class pdo_db

{

/**

* PDO实例

* @var PDO

*/

protected $_db;

/**

* PDO准备语句

* @var PDOStatement

*/

protected $_stmt;

/**

* 最后的SQL语句

* @var string

*/

protected $_sql;

/**

* 配置信息 $config=array('dsn'=>xxx,'name'=>xxx,'password'=>xxx,'option'=>xxx)

* @var array

*/

protected $_config;

/**

* 构造函数

* @param array $config

*/

public function __construct($config)

{

$this->_config = $config;

}

/**

* 连接数据库

* @return void

*/

public function connect()

{

$this->_db = new PDO($this->_config['dsn'], $this->_config['name'], $this->_config['password'], $this->_config['option']);

//默认把结果序列化成stdClass

// $this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

$this->_db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

//自己写代码捕获Exception

$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);

}

/**

* 断开连接

* @return void

*/

public function disConnect()

{

$this->_db = null;

$this->_stmt = null;

}

/**

* 执行sql,返回新加入的id

* @param string $statement

* @return string

*/

public function exec($statement)

{

if ($this->_db->exec($statement)){

$this->_sql = $statement;

return $this->lastId();

}

$this->errorMessage();

}

/**

* 查询sql

* @param string $statement

* @return pdo_db

*/

public function query($statement)

{

$res = $this->_db->query($statement);

if ($res){

$this->_stmt = $res;

$this->_sql = $statement;

return $this;

}

$this->errorMessage();

}

/**

* 序列化一次数据

* @return mixed

*/

public function fetchOne()

{

return $this->_stmt->fetch();

}

/**

* 序列化所有数据

* @return array

*/

public function fetchAll()

{

return $this->_stmt->fetchAll();

}

/**

* 最后添加的id

* @return string

*/

public function lastId()

{

return $this->_db->lastInsertId();

}

/**

* 影响的行数

* @return int

*/

public function affectRows()

{

return $this->_stmt->rowCount();

}

/**

* 预备语句

* @param string $statement

* @return pdo_db

*/

public function prepare($statement)

{

$res = $this->_db->prepare($statement);

if ($res){

$this->_stmt = $res;

$this->_sql = $statement;

return $this;

}

$this->errorMessage();

}

/**

* 绑定数据

* @param array $array

* @return pdo_db

*/

public function bindArray($array)

{

foreach ($array as $k => $v){

if (is_array($v)){

//array的有效结构 array('value'=>xxx,'type'=>PDO::PARAM_XXX)

$this->_stmt->bindValue($k + 1, $v['value'], $v['type']);

} else{

$this->_stmt->bindValue($k + 1, $v, PDO::PARAM_STR);

}

}

return $this;

}

/**

* 执行预备语句

* @return bool

*/

public function execute()

{

if ($this->_stmt->execute()){

return true;

}

$this->errorMessage();

}

/**

* 开启事务

* @return bool

*/

public function beginTransaction()

{

return $this->_db->beginTransaction();

}

/**

* 执行事务

* @return bool

*/

public function commitTransaction()

{

return $this->_db->commit();

}

/**

* 回滚事务

* @return bool

*/

public function rollbackTransaction()

{

return $this->_db->rollBack();

}

/**

* 抛出错误

* @throws Error

* @return void

*/

public function errorMessage()

{

return;

$msg = $this->_db->errorInfo();

throw new Exception('数据库错误:' . $msg[2]);

}

//---------------------

/**

* 单例实例

* @var pdo_db

*/

protected static $_instance;

/**

* 默认数据库

* @static

* @param array $config

* @return pdo_db

*/

public static function instance($config)

{

if (!self::$_instance instanceof pdo_db){

self::$_instance = new pdo_db($config);

self::$_instance->connect();

}

return self::$_instance;

}

//----------------------

/**

* 获取PDO支持的数据库

* @static

* @return array

*/

public static function getSupportDriver(){

return PDO::getAvailableDrivers();

}

/**

* 获取数据库的版本信息

* @return array

*/

public function getDriverVersion(){

$name = $this->_db->getAttribute(PDO::ATTR_DRIVER_NAME);

return array($name=>$this->_db->getAttribute(PDO::ATTR_CLIENT_VERSION));

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值