喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

上一主题 下一主题
     
标题: [原创] 发一个MYSQL::PDO类,其实和函数差不多,全是静态方法  
 
books (books)
高级会员
Rank: 4
老会员



UID 23239
精华 0
积分 546
帖子 562
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2003-9-16
状态 离线
发一个MYSQL::PDO类,其实和函数差不多,全是静态方法



<?php

class Mysql {

  
// introspect
  
public static $classname __CLASS__;

  
// members
  
public static $debug 1;


  
// methods
  
public static function connect(&$conn, &$error) {
    try {
      
$conn = new PDO('mysql:host=localhost;dbname=HP''root''books', array(PDO::ATTR_PERSISTENT => true));
      
$conn->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
//      $conn->exec('SET NAMES UTF8');
//      $conn->beginTransaction();
      
return true;
    }
    catch (
PDOException $e) {
      if (
self::$debug == 1) { $error['msg'] = $e->getMessage(); }
      else { 
$error['code'] = 'error_mysql:connect'$error['msg'] = '数据库连接错误。'; }
      
$conn null;
      return 
false;
    }
  }

  
// simple select
  
public static function query(&$conn, &$stmt, &$error, &$bind, &$res, &$sql$mode ''$prepare true) {
    try {
      if (
$prepare) { $stmt $conn->prepare($sql); }
      if (
$bind['mode'] == 'yes') {
        foreach (
$bind['vari'] as $key => &$val) { $stmt->bindValue($key$val); }
      }
      
$stmt->execute(); $res $stmt->fetchAll(PDO::FETCH_ASSOC);
      if (!
$res) { $error['code'] = 'nodata'$error['msg'] = '查无数据'$error['cnt'] = 0; }
      return 
true;
    }
    catch (
PDOException $e) {
      if (
self::$debug == 1) { $error['msg'] = $e->getMessage(); $error['sqltext'] = $sql; }
      else { 
$error['code'] = 'error_mysql:query'$error['msg'] = '数据库查询错误。'; }
//      $conn->rollBack();
      
$stmt null$conn null;
      return 
false;
    }
  }


  
// simple update insert delete
  
public static function update(&$conn, &$stmt, &$error, &$bind, &$sql$mode ''$prepare true) {
    try {
//      if (!$conn) {
//        self::connect($conn, $error);
//      }
      
if ($prepare) { $stmt $conn->prepare($sql); }
      if (
$bind['mode'] == 'yes') {
        foreach (
$bind['vari'] as $key => &$val) { $stmt->bindValue($key$val); }
      }
      
$stmt->execute(); $error['cnt'] = $stmt->rowCount();
      if (
$error['cnt'] === 0) { $error['code'] = 'nodata'$error['msg'] = '没有更新'; }
      return 
true;
    }
    catch (
PDOException $e) {
      if (
$error['catch'] == 1) { $error['code'] = ''$error['msg'] = $e->getMessage(); }
      elseif (
self::$debug == 1) { $error['msg'] = $e->getMessage(); $error['sqltext'] = $sql; }
      else { 
$error['code'] = 'error_mysql:query'$error['msg'] = '数据库更新错误。'; }
//      $conn->rollBack();
      
$stmt null$conn null;
      return 
false;
    }
  }


  
// simple call
  
public static function call(&$conn, &$stmt, &$error, &$bind, &$res, &$sql$mode ''$prepare true) {
    try {
      if (
$prepare) { $stmt $conn->prepare($sql); }
      if (
$bind['mode'] == 'yes') {
        if (
is_array($bind['vari']) and count($bind['vari']) > 0) {
          foreach (
$bind['vari'] as $key => &$val) { $stmt->bindValue($key$val); }
        }
      }
      
$stmt->execute();
      if (
$res === '1') {
        
$res = array();
        
$res $stmt->fetchAll(PDO::FETCH_ASSOC);
        if (!
$res) { $error['code'] = 'nodata'$error['msg'] = '查无数据'$error['cnt'] = 0; }
      }
      elseif (
$res === 'n') {
        
$res = array(); $i 0$j 0;
        do {
          if (!
$res[$i] = $stmt->fetchAll(PDO::FETCH_ASSOC)) {
            
$res[$i]['cnt'] = 0$j++;
          }
          
$i++;
        } while (
$stmt->nextRowset());
        if (
$i == $j) {
          
$error['code'] = 'nodata'$error['msg'] = '查无数据'$error['cnt'] = 0;
        }
      }
      return 
true;
    }
    catch (
PDOException $e) {
      if (
self::$debug == 1) { $error['msg'] = $e->getMessage(); $error['sqltext'] = $sql; }
      else { 
$error['code'] = 'error_mysql:query'$error['msg'] = '数据库查询错误。'; }
//      $conn->rollBack();
      
$stmt null$conn null;
      return 
false;
    }
  }

  public static function 
commit(&$conn, &$stmt) {
    try {
      if (
$conn$conn->commit();
      return 
true;
    }
    catch (
PDOException $e) {
      if (
self::$debug == 1) { $error['code'] = 'error_fatal:commit'$error['msg'] = $e->getMessage(); }
      else { 
$error['code'] = 'error_fatal:commit'$error['msg'] = '数据库提交异常错误。'; }
      
$stmt null$conn null;
      return 
false;
    }
  }

  public static function 
rollback(&$conn, &$stmt) {
    try {
      if (
$conn$conn->rollBack();
      return 
true;
    }
    catch (
PDOException $e) {
      if (
self::$debug == 1) { $error['code'] = 'error_fatal:commit'$error['msg'] = $e->getMessage(); }
      else { 
$error['code'] = 'error_fatal:rollback'$error['msg'] = '数据库回滚异常错误。'; }
      
$stmt null$conn null;
      return 
false;
    }
  }


  public static function 
close(&$conn, &$stmt$term false) {
    try {
//      if ($term) {
//        if ($conn) self::commit($conn);
//      }
//      else {
//        if ($conn) self::rollback($conn);
//      }
      
$stmt null;
//      $conn = null;
    
}
    catch (
PDOException $e) {
      if (
self::$debug == 1) { $error['code'] = 'error_fatal:close_commit'$error['msg'] = $e->getMessage(); }
      else { 
$error['code'] = 'error_fatal:close_rollback'$error['msg'] = '数据库关闭异常错误。'; }
      
$stmt null$conn null;
      return 
false;
    }
  }

}
?>
PS1:如果您使用INNO引擎,需要事务处理的话,把那些注释搞掉就可以了!
PS2:支持存储过程返回多条结果集,暂不支持存储过程OUT,INOUT参数!

[ 本帖最后由 books 于 2007-5-30 04:13 PM 编辑 ]
2007-5-30 03:54 PM#1
查看资料  发短消息  顶部
 
books (books)
高级会员
Rank: 4
老会员



UID 23239
精华 0
积分 546
帖子 562
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2003-9-16
状态 离线
[推荐阅读] 请问,我在用ftp上传文件目录的时候,怎么总有很多文件没有上传成功呀?
调用举例:

<?php

Mysql
::connect($conn$error);
$sql "SELECT * FROM TEST WHERE ID = :ID AND NAME = :NAME";
$bind['mode'] = 'yes';
$bind['vari'][':ID'] = 1;
$bind['vari'][':NAME'] = 'books';
Mysql::query($conn$stmt$error$bind$res$sql);

echo 
'<pre>';
print_r($res);
echo 
'</pre>';

?>
2007-5-30 04:02 PM#2
查看资料  发短消息  顶部
 
php5
金牌会员
Rank: 6Rank: 6
中级会员


UID 62897
精华 0
积分 1237
帖子 1089
金钱 1237 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2005-1-3
来自 福建
状态 离线
[推荐阅读] PHP对于二进制的操作
没看清,为什么不多支持几种数据库?

这是我一直使用Adodb的最大原因

[ 本帖最后由 php5 于 2007-5-30 04:43 PM 编辑 ]
2007-5-30 04:41 PM#3
查看资料  发短消息  顶部
 
books (books)
高级会员
Rank: 4
老会员



UID 23239
精华 0
积分 546
帖子 562
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2003-9-16
状态 离线
[推荐阅读] 代码不能在火狐运行
我从来不用支持多种数据库的方案!所以我从来不用ADODB。
2007-6-4 10:36 AM#4
查看资料  发短消息  顶部
 
Lukin
新手上路
Rank: 1



UID 91227
精华 0
积分 38
帖子 18
金钱 38 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-4-13
来自 上海
状态 离线
[推荐阅读] 电梯里发生的一件狂尴尬的事情
不错,留个脚印,日后有用!



http://www.lukin.net
2007-9-18 05:06 PM#5
查看资料  访问主页  发短消息  QQ  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4934
帖子 1700
金钱 4924 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] 我考虑的一个用户登陆验证流程,那位来看看有无漏洞
还是保留php4的写法

不然无法在php4上运行




在场外支持奥运.....
2007-9-19 06:04 PM#6
查看资料  访问主页  发短消息  QQ  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.040862 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP