php mysql pdo 封装类_php pdo封装类

classMYPDO

{protected static $_instance = null;protected $dbname = '';protected $dsn;protected $dbh;//链接标识

/**

* @param $dbhost

* ip地址 如localhost;127.0.0.1

* @param $dbuser

* mysql用户 如'root';

* @param $dbpasswd

* mysql登录密码 如'root'

* @param $dbname

* 数据库名字 自行查看数据库

* @param $dbcharset

* 写入编码格式 如:utf-8

* character_set_connection character_set_cliect 标注查询返回字符编码,不包含列

* 查询会被服务器从character_set_client转换到character_set_connection

* character_set_results 标注结果返回字符编码,包含列*/

private function __construct($dbhost,$dbuser,$dbpasswd,$dbname,$dbcharset)

{try{$this->dsn ='mysql:host='.$dbhost.';dbname='.$dbname;$this->dbh = new PDO($this->dsn,$dbuser,$dbpasswd);$this->dbh->exec('character_set_connection='.$dbcharset.'character_set_results='.$dbcharset.'character_set_cliect=binary');

}catch(PDOException $e)

{$this->outputError($e->getMessage());

}

}/**

* __clone 是对象进行浅复制(只被复制引用)

* 在方法中再次进行clone 就是深复制(其中一个修改另外一个也会被修改)*/

private function__clone()

{

}/**

* 单例类

* Singleton instance

* @return Object*/

public static function getInstance($dbhost,$dbuser,$dbpasswd,$dbname,$dbcharset)

{if(self::$_instance === null)

{

self::$_instance = new self($dbhost,$dbuser,$dbpasswd,$dbname,$dbcharset);

}return self::$_instance;

}/**

* Query 查询

*

* @param String $strSql SQL语句

* @param String $queryMode 查询方式(All or Row)

* @param Boolean $debug

* @return Array*/

public function query($strSql, $queryMode = 'All', $debug = false)

{if ($debug === true) $this->debug($strSql);$recordset = $this->dbh->query($strSql);$this->getPDOError();if ($recordset) {$recordset->setFetchMode(PDO::FETCH_ASSOC);if ($queryMode == 'All') {$result = $recordset->fetchAll();

}elseif ($queryMode == 'Row') {$result = $recordset->fetch();

}

}else{$result = null;

}return $result;

}/**

* Update 更新

*

* @param String $table 表名

* @param Array $arrayDataValue 字段与值

* @param String $where 条件

* @param Boolean $debug

* @return Int*/

public function update($table, $arrayDataValue, $where = '', $debug = false)

{$this->checkFields($table, $arrayDataValue);if ($where) {$strSql = '';foreach ($arrayDataValue as $key => $value) {$strSql .= ", `$key`='$value'";

}$strSql = substr($strSql, 1);$strSql = "UPDATE `$table` SET $strSql WHERE $where";

}else{$strSql = "REPLACE INTO `$table` (`".implode('`,`', array_keys($arrayDataValue))."`) VALUES ('".implode("','", $arrayDataValue)."')";

}if ($debug === true) $this->debug($strSql);$result = $this->dbh->exec($strSql);$this->getPDOError();return $result;

}/**

* Insert 插入

*

* @param String $table 表名

* @param Array $arrayDataValue 字段与值

* @param Boolean $debug

* @return Int*/

public function insert($table, $arrayDataValue, $debug = false)

{$this->checkFields($table, $arrayDataValue);$strSql = "INSERT INTO `$table` (`".implode('`,`', array_keys($arrayDataValue))."`) VALUES ('".implode("','", $arrayDataValue)."')";if ($debug === true) $this->debug($strSql);$result = $this->dbh->exec($strSql);$this->getPDOError();return $result;

}/**

* Replace 覆盖方式插入

*

* @param String $table 表名

* @param Array $arrayDataValue 字段与值

* @param Boolean $debug

* @return Int*/

public function replace($table, $arrayDataValue, $debug = false)

{$this->checkFields($table, $arrayDataValue);$strSql = "REPLACE INTO `$table`(`".implode('`,`', array_keys($arrayDataValue))."`) VALUES ('".implode("','", $arrayDataValue)."')";if ($debug === true) $this->debug($strSql);$result = $this->dbh->exec($strSql);$this->getPDOError();return $result;

}/**

* Delete 删除

*

* @param String $table 表名

* @param String $where 条件

* @param Boolean $debug

* @return Int*/

public function delete($table, $where = '', $debug = false)

{if ($where == '') {$this->outputError("'WHERE' is Null");

}else{$strSql = "DELETE FROM `$table` WHERE $where";if ($debug === true) $this->debug($strSql);$result = $this->dbh->exec($strSql);$this->getPDOError();return $result;

}

}/**

* execSql 执行SQL语句

*

* @param String $strSql

* @param Boolean $debug

* @return Int*/

public function execSql($strSql, $debug = false)

{if ($debug === true) $this->debug($strSql);$result = $this->dbh->exec($strSql);$this->getPDOError();return $result;

}/**

* 获取字段最大值

*

* @param string $table 表名

* @param string $field_name 字段名

* @param string $where 条件*/

public function getMaxValue($table, $field_name, $where = '', $debug = false)

{$strSql = "SELECT MAX(".$field_name.") AS MAX_VALUE FROM $table";if ($where != '') $strSql .= " WHERE $where";if ($debug === true) $this->debug($strSql);$arrTemp = $this->query($strSql, 'Row');$maxValue = $arrTemp["MAX_VALUE"];if ($maxValue == "" || $maxValue == null) {$maxValue = 0;

}return $maxValue;

}/**

* 获取指定列的数量

*

* @param string $table

* @param string $field_name

* @param string $where

* @param bool $debug

* @return int*/

public function getCount($table, $field_name, $where = '', $debug = false)

{$strSql = "SELECT COUNT($field_name) AS NUM FROM $table";if ($where != '') $strSql .= " WHERE $where";if ($debug === true) $this->debug($strSql);$arrTemp = $this->query($strSql, 'Row');return $arrTemp['NUM'];

}/**

* 获取表引擎

*

* @param String $dbName 库名

* @param String $tableName 表名

* @param Boolean $debug

* @return String*/

public function getTableEngine($dbName, $tableName)

{$strSql = "SHOW TABLE STATUS FROM $dbName WHERE Name='".$tableName."'";$arrayTableInfo = $this->query($strSql);$this->getPDOError();return $arrayTableInfo[0]['Engine'];

}/**

* beginTransaction 事务开始*/

private functionbeginTransaction()

{$this->dbh->beginTransaction();

}/**

* commit 事务提交*/

private functioncommit()

{$this->dbh->commit();

}/**

* rollback 事务回滚*/

private functionrollback()

{$this->dbh->rollback();

}/**

* transaction 通过事务处理多条SQL语句

* 调用前需通过getTableEngine判断表引擎是否支持事务

*

* @param array $arraySql

* @return Boolean*/

public function execTransaction($arraySql)

{$retval = 1;$this->beginTransaction();foreach ($arraySql as $strSql) {if ($this->execSql($strSql) == 0) $retval = 0;

}if ($retval == 0) {$this->rollback();return false;

}else{$this->commit();return true;

}

}/**

* checkFields 检查指定字段是否在指定数据表中存在

*

* @param String $table

* @param array $arrayField*/

private function checkFields($table, $arrayFields)

{$fields = $this->getFields($table);foreach ($arrayFields as $key => $value) {if (!in_array($key, $fields)) {$this->outputError("Unknown column `$key` in field list.");

}

}

}/**

* getFields 获取指定数据表中的全部字段名

*

* @param String $table 表名

* @return array*/

private function getFields($table)

{$fields = array();$recordset = $this->dbh->query("SHOW COLUMNS FROM $table");$this->getPDOError();$recordset->setFetchMode(PDO::FETCH_ASSOC);$result = $recordset->fetchAll();foreach ($result as $rows) {$fields[] = $rows['Field'];

}return $fields;

}/**

* getPDOError 捕获PDO错误信息*/

private functiongetPDOError()

{if ($this->dbh->errorCode() != '00000') {$arrayError = $this->dbh->errorInfo();$this->outputError($arrayError[2]);

}

}/**

* debug

*

* @param mixed $debuginfo*/

private function debug($debuginfo)

{var_dump($debuginfo);exit();

}/**

* 输出错误信息

*

* @param String $strErrMsg*/

private function outputError($strErrMsg)

{throw new Exception('MySQL Error: '.$strErrMsg);

}/**

* destruct 关闭数据库连接*/

public functiondestruct()

{$this->dbh = null;

}

}

$db = MyPDO::getInstance('localhost','root','root','renshi','utf8');$sql = "select *from renshi_admin";$result = $db->query($sql);echo "

";var_dump($result);//do something...

$db->destruct();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 PHP PDO 封装的示例: ```php class Database { private $host = "localhost"; private $user = "username"; private $password = "password"; private $database = "database"; private $charset = "utf8mb4"; private $pdo; public function __construct() { $dsn = "mysql:host={$this->host};dbname={$this->database};charset={$this->charset}"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $this->pdo = new PDO($dsn, $this->user, $this->password, $options); } public function query($sql, $params = []) { $stmt = $this->pdo->prepare($sql); $stmt->execute($params); return $stmt; } public function fetchAll($sql, $params = []) { $stmt = $this->query($sql, $params); return $stmt->fetchAll(); } public function fetch($sql, $params = []) { $stmt = $this->query($sql, $params); return $stmt->fetch(); } public function insert($table, $data) { $keys = array_keys($data); $values = array_values($data); $placeholders = implode(',', array_fill(0, count($values), '?')); $sql = "INSERT INTO $table (" . implode(',', $keys) . ") VALUES ($placeholders)"; $this->query($sql, $values); return $this->pdo->lastInsertId(); } public function update($table, $data, $where) { $set = []; $values = []; foreach ($data as $key => $value) { $set[] = "$key = ?"; $values[] = $value; } $sql = "UPDATE $table SET " . implode(',', $set) . " WHERE $where"; return $this->query($sql, $values)->rowCount(); } public function delete($table, $where) { $sql = "DELETE FROM $table WHERE $where"; return $this->query($sql)->rowCount(); } } ``` 这个封装PDO,包含了常用的查询操作,如 query、fetchAll、fetch,以及增删改操作,如 insert、update、delete。你可以根据自己的需要进行扩展。使用时,只需要实例化这个,并调用相应的方法即可。例如: ```php $db = new Database(); $rows = $db->fetchAll("SELECT * FROM table WHERE id = ?", [1]); ``` 这个示例会查询一个 ID 为 1 的记录,并返回一个数组。你可以根据需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值