分享一个基于PDO的mysql数据库操作工具类

愤怒的不争 2011-02-18 10:42:56
原帖地址:http://buzheng.org/blog/mysql-pdo-utils

PHP中操作数据库使用PDO已经是大势所趋,PDO始于PHP5,PHP6中将默认使用PDO。不同于以前版本中混乱的数据库操作方式,PDO统一了对数据库的访问方式,给编程带来了极大的便利性。本工具类就是基于PDO,模拟了java世界spring框架中的JdbcTemplate操作类,希望能给大家带来帮助。

共有两个类:

* DbConfig类负责配置数据库访问信息,包括:服务器地址、端口、数据库实例名、用户名、用户密码、字符集等。
* DbTemplate类集合了对数据库的访问操作,主要有以下几个操作:
1. queryRows : 返回多行记录
2. queryRow : 返回为单条记录
3. queryForInt : 查询单字段,返回整数
4. queryForFloat : 查询单字段,返回浮点数(float)
5. queryForDouble : 查询单字段,返回浮点数(double)
6. queryForObject : 查询单字段,返回对象,实际类型有数据库决定
7. update : 执行一条更新语句. insert / upadate / delete

如何使用?

DbConfig::setHost('127.0.0.1');
DbConfig::setPort('3306');
DbConfig::setDbname('xxxx');
DbConfig::setUsername('xxxx');
DbConfig::setPassword('xxxx');
DbConfig::setCharset('utf-8');

//单行记录
$sql = 'select id from table_name where id = ?';
$db = new DbTemplate();
$row = $db->queryRow($sql, array($id));
print $row['ID']; // 注意此处是大写

//多行记录
$sql = 'select id from table_name';
$db = new DbTemplate();
$rows = $db->queryRow($sql);
foreach ($row as $rows) {
print $row['ID']; // 注意此处是大写
}


源代码

/**
* 数据库参数配置类
*
* @author zhjiun@gmail.com
*/
class DbConfig {

private static $dbms = "mysql";
private static $host = '127.0.0.1';
private static $port = '3306';
private static $username = '';
private static $password = '';
private static $dbname = '';
private static $charset = 'utf-8';
private static $dsn;

/**
*
* @return 返回pdo dsn配置
*/
public static function getDsn() {
if (!isset(self::$dsn)) {
self::$dsn = self::$dbms . ':host=' . self::$host . ';port=' .
self::$port . ';dbname=' . self::$dbname;
if (strlen(self::$charset) > 0) {
self::$dsn = self::$dsn . ';charset=' . self::$charset;
}
}
return self::$dsn;
}

/**
* 设置mysql数据库服务器主机
* @param $host 主机的IP地址
*/
public static function setHost($host) {
if (isset($host) && strlen($host) > 0)
self::$host = trim($host);
}

/**
* 设置mysql数据库服务器的端口
* @param $port 端口
*/
public static function setPort($port) {
if (isset($port) && strlen($port) > 0)
self::$port = trim($port);
}

/**
* 设置mysql数据库服务器的登陆用户名
* @param $username
*/
public static function setUsername($username) {
if (isset($username) && strlen($username) > 0)
self::$username = $username;
}

/**
* 设置mysql数据库服务器的登陆密码
* @param $password
*/
public static function setPassword($password) {
if (isset($password) && strlen($password) > 0)
self::$password = $password;
}

/**
* 设置mysql数据库服务器的数据库实例名
* @param $dbname 数据库实例名
*/
public static function setDbname($dbname) {
if (isset($dbname) && strlen($dbname) > 0)
self::$dbname = $dbname;
}

/**
* 设置数据库编码
* @param $charset
*/
public static function setCharset($charset) {
if (isset($charset) && strlen($charset) > 0)
self::$charset = $charset;
}

}

/**
* 一个数据库操作工具类
*
* @author zhjiun@gmail.com
*/
class DbTemplate {

/**
* 返回多行记录
* @param $sql
* @param $parameters
* @return 记录数据
*/
public function queryRows($sql, $parameters = null) {
return $this->exeQuery($sql, $parameters);
}

/**
* 返回为单条记录
* @param $sql
* @param $parameters
* @return
*/
public function queryRow($sql, $parameters = null) {
$rs = $this->exeQuery($sql, $parameters);
if (count($rs) > 0) {
return $rs[0];
} else {
return null;
}
}

/**
* 查询单字段,返回整数
* @param $sql
* @param $parameters
* @return
*/
public function queryForInt($sql, $parameters = null) {
$rs = $this->exeQuery($sql, $parameters);
if (count($rs) > 0) {
return intval($rs[0][0]);
} else {
return null;
}
}

/**
* 查询单字段,返回浮点数(float)
* @param $sql
* @param $parameters
* @return
*/
public function queryForFloat($sql, $parameters = null) {
$rs = $this->exeQuery($sql, $parameters);
if (count($rs) > 0) {
return floatval($rs[0][0]);
} else {
return null;
}
}

/**
* 查询单字段,返回浮点数(double)
* @param $sql
* @param $parameters
* @return
*/
public function queryForDouble($sql, $parameters = null) {
$rs = $this->exeQuery($sql, $parameters);
if (count($rs) > 0) {
return doubleval($rs[0][0]);
} else {
return null;
}
}

/**
* 查询单字段,返回对象,实际类型有数据库决定
* @param $sql
* @param $parameters
* @return
*/
public function queryForObject($sql, $parameters = null) {
$rs = $this->exeQuery($sql, $parameters);
if (count($rs) > 0) {
return $rs[0][0];
} else {
return null;
}
}

/**
* 执行一条更新语句.insert / upadate / delete
* @param $sql
* @param $parameters
* @return 影响行数
*/
public function update($sql, $parameters = null) {
return $this->exeUpdate($sql, $parameters);
}

private function getConnection() {
$conn = new PDO(DbConfig::getDsn(), DbConfig::getUsername(), DbConfig::getPassword());
$conn->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
return $conn;
}

private function exeQuery($sql, $parameters = null) {
$conn = $this->getConnection();
$stmt = $conn->prepare($sql);
$stmt->execute($parameters);
$rs = $stmt->fetchAll();
$stmt = null;
$conn = null;
return $rs;
}

private function exeUpdate($sql, $parameters = null) {
$conn = $this->getConnection();
$stmt = $conn->prepare($sql);
$stmt->execute($parameters);
$affectedRows = $stmt->rowCount();
$stmt = null;
$conn = null;
return $affectedRows;
}
}



原帖地址:http://buzheng.org/blog/mysql-pdo-utils
...全文
199 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
愤怒的不争 2011-02-20
  • 打赏
  • 举报
回复
呵呵, 大家都给提点意见
kaifadi 2011-02-20
  • 打赏
  • 举报
回复
开码的一定要顶。支持楼主!
TM_skyinfo 2011-02-19
  • 打赏
  • 举报
回复
支持分享!
xsxs89757 2011-02-19
  • 打赏
  • 举报
回复
谢谢分享

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧