澳门新葡萄京官网首页PDO操作MySql类分享

复制代码 代码如下:
class HMongodb {    

来源:

为了让自己的数据类能够做到最大化的重用,就写个能够重用的PDO操作MySql的类:

    private $mongo;    //Mongodb连接
    private $curr_db_name;
    private $curr_table_name;
    private $error;    

  1. <?php     
  2. /*** Mongodb类** examples:     
  3. * $mongo = new HMongodb(“127.0.0.1:11223”);   
  4. * $mongo->selectDb(“test_db”);   
  5. * 创建索引   
  6. * $mongo->ensureIndex(“test_table”, array(“id”=>1), array(‘unique’=>true));   
  7. * 获取表的记录   
  8. * $mongo->count(“test_table”);   
  9. * 插入记录   
  10. * $mongo->insert(“test_table”, array(“id”=>2, “title”=>”asdqw”));   
  11. * 更新记录   
  12. * $mongo->update(“test_table”, array(“id”=>1),array(“id”=>1,”title”=>”bbb”));   
  13. * 更新记录-存在时更新,不存在时添加-相当于set   
  14. * $mongo->update(“test_table”, array(“id”=>1),array(“id”=>1,”title”=>”bbb”),array(“upsert”=>1));  
  15. * 查找记录   
  16. * $mongo->find(“c”, array(“title”=>”asdqw”), array(“start”=>2,”limit”=>2,”sort”=>array(“id”=>1)))  
  17. * 查找一条记录   
  18. * $mongo->findOne(“$mongo->findOne(“ttt”, array(“id”=>1))”, array(“id”=>1));   
  19. * 删除记录   
  20. * $mongo->remove(“ttt”, array(“title”=>”bbb”));   
  21. * 仅删除一条记录   
  22. * $mongo->remove(“ttt”, array(“title”=>”bbb”), array(“justOne”=>1));   
  23. * 获取Mongo操作的错误信息   
  24. * $mongo->getError();   
  25. */     
  26.      
  27. class HMongodb {     
  28.      
  29.     //Mongodb连接     
  30.     var $mongo;     
  31.      
  32.     var $curr_db_name;     
  33.     var $curr_table_name;     
  34.     var $error;     
  35.      
  36.     /**   
  37.     * 构造函数   
  38.     * 支持传入多个mongo_server(1.一个出问题时连接其它的server 2.自动将查询均匀分发到不同server)   
  39.     *   
  40.     * 参数:   
  41.     * $mongo_server:数组或字符串-array(“127.0.0.1:1111”, “127.0.0.1:2222”)-“127.0.0.1:1111”   
  42.     * $connect:初始化mongo对象时是否连接,默认连接   
  43.     * $auto_balance:是否自动做负载均衡,默认是   
  44.     *   
  45.     * 返回值:   
  46.     * 成功:mongo object   
  47.     * 失败:false   
  48.     */     
  49.     function __construct($mongo_server, $connect=true, $auto_balance=true)  
      
  50.     {     
  51.         if (is_array($mongo_澳门新葡萄京官网首页,server))     
  52.         {     
  53.             $mongo_server_num = count($mongo_server);     
  54.             if ($mongo_server_num > 1 && $auto_balance)     
  55.             {     
  56.                 $prior_server_num = rand(1, $mongo_server_num);  
      
  57.                 $rand_keys = array_rand($mongo_server,$mongo_server_num);  
      
  58.                 $mongo_server_str = $mongo_server[$prior_server_num-1];  
      
  59.                 foreach ($rand_keys as $key)     
  60.                 {     
  61.                     if ($key != $prior_server_num – 1)     
  62.                     {     
  63.                         $mongo_server_str .= ‘,’ . $mongo_server[$key];  
      
  64.                     }     
  65.                 }     
  66.             }     
  67.             else     
  68.             {     
  69.                 $mongo_server_str = implode(‘,’, $mongo_server);  
      
  70.             }                  }     
  71.         else     
  72.         {     
  73.             $mongo_server_str = $mongo_server;     
  74.         }     
  75.         try {     
  76.             $this->mongo = new Mongo($mongo_server, array(‘connect’=>$connect));  
      
  77.         }     
  78.         catch (MongoConnectionException $e)     
  79.         {     
  80.             $this->error = $e->getMessage();     
  81.             return false;     
  82.         }     
  83.     }     
  84.      
  85.     function getInstance($mongo_server, $flag=array())     
  86.     {     
  87.         static $mongodb_arr;     
  88.         if (emptyempty($flag[‘tag’]))     
  89.         {     
  90.             $flag[‘tag’] = ‘default’;          }     
  91.         if (isset($flag[‘force’]) && $flag[‘force’] == true)  
      
  92.         {     
  93.             $mongo = new HMongodb($mongo_server);     
  94.             if (emptyempty($mongodb_arr[$flag[‘tag’]]))     
  95.             {     
  96.                 $mongodb_arr[$flag[‘tag’]] = $mongo;     
  97.             }     
  98.             return $mongo;     
  99.         }     
  100.         else if (isset($mongodb_arr[$flag[‘tag’]]) && is_resource($mongodb_arr[$flag[‘tag’]]))  
      
  101.         {     
  102.             return $mongodb_arr[$flag[‘tag’]];     
  103.         }     
  104.         else     
  105.         {     
  106.             $mongo = new HMongodb($mongo_server);     
  107.             $mongodb_arr[$flag[‘tag’]] = $mongo;     
  108.             return $mongo;                  }          }     
  109.      
  110.     /**   
  111.     * 连接mongodb server   
  112.     *   
  113.     * 参数:无   
  114.     *   
  115.     * 返回值:   
  116.     * 成功:true   
  117.     * 失败:false   
  118.     */     
  119.     function connect()     
  120.     {     
  121.         try {     
  122.             $this->mongo->connect();     
  123.             return true;     
  124.         }     
  125.         catch (MongoConnectionException $e)     
  126.         {     
  127.             $this->error = $e->getMessage();     
  128.             return false;     
  129.         }     
  130.     }     
  131.      
  132.     /**   
  133.     * select db   
  134.     *   
  135.     * 参数:$dbname   
  136.     *   
  137.     * 返回值:无   
  138.     */     
  139.     function selectDb($dbname)     
  140.     {     
  141.         $this->curr_db_name = $dbname;     
  142.     }     
  143.      
  144.     /**   
  145.     * 创建索引:如索引已存在,则返回。   
  146.     *   
  147.     * 参数:   
  148.     * $table_name:表名   
  149.     * $index:索引-array(“id”=>1)-在id字段建立升序索引   
  150.     * $index_param:其它条件-是否唯一索引等   
  151.     *   
  152.     * 返回值:   
  153.     * 成功:true   
  154.     * 失败:false   
  155.     */     
  156.     function ensureIndex($table_name, $index, $index_param=array())  
      
  157.     {     
  158.         $dbname = $this->curr_db_name;     
  159.         $index_param[‘safe’] = 1;     
  160.         try {     
  161.             $this->mongo->$dbname->$table_name->ensureIndex($index, $index_param);  
      
  162.             return true;     
  163.         }     
  164.         catch (MongoCursorException $e)     
  165.         {     
  166.             $this->error = $e->getMessage();     
  167.             return false;     
  168.         }     
  169.     }     
  170.      
  171.     /**   
  172.     * 插入记录   
  173.     *   
  174.     * 参数:   
  175.     * $table_name:表名   
  176.     * $record:记录   
  177.     *   
  178.     * 返回值:   
  179.     * 成功:true   
  180.     * 失败:false   
  181.     */     
  182.     function insert($table_name, $record)     
  183.     {     
  184.         $dbname = $this->curr_db_name;     
  185.         try {     
  186.             $this->mongo->$dbname->$table_name->insert($record, array(‘safe’=>true));  
      
  187.             return true;     
  188.         }     
  189.         catch (MongoCursorException $e)     
  190.         {     
  191.             $this->error = $e->getMessage();     
  192.             return false;     
  193.         }     
  194.     }     
  195.      
  196.     /**   
  197.     * 查询表的记录数   
  198.     *   
  199.     * 参数:   
  200.     * $table_name:表名   
  201.     *   
  202.     * 返回值:表的记录数   
  203.     */     
  204.     function count($table_name)     
  205.     {     
  206.         $dbname = $this->curr_db_name;     
  207.         return $this->mongo->$dbname->$table_name->count();  
      
  208.     }     
  209.      
  210.     /**   
  211.     * 更新记录   
  212.     *   
  213.     * 参数:   
  214.     * $table_name:表名   
  215.     * $condition:更新条件   
  216.     * $newdata:新的数据记录   
  217.     * $options:更新选择-upsert/multiple   
  218.     *   
  219.     * 返回值:   
  220.     * 成功:true   
  221.     * 失败:false   
  222.     */     
  223.     function update($table_name, $condition, $newdata, $options=array())  
      
  224.     {     
  225.         $dbname = $this->curr_db_name;     
  226.         $options[‘safe’] = 1;     
  227.         if (!isset($options[‘multiple’]))     
  228.         {     
  229.             $options[‘multiple’] = 0;          }     
  230.         try {     
  231.             $this->mongo->$dbname->$table_name->update($condition, $newdata, $options);  
      
  232.             return true;     
  233.         }     
  234.         catch (MongoCursorException $e)     
  235.         {     
  236.             $this->error = $e->getMessage();     
  237.             return false;     
  238.         }          }     
  239.      
  240.     /**   
  241.     * 删除记录   
  242.     *   
  243.     * 参数:   
  244.     * $table_name:表名   
  245.     * $condition:删除条件   
  246.     * $options:删除选择-justOne   
  247.     *   
  248.     * 返回值:   
  249.     * 成功:true   
  250.     * 失败:false   
  251.     */     
  252.     function remove($table_name, $condition, $options=array())  
      
  253.     {     
  254.         $dbname = $this->curr_db_name;     
  255.         $options[‘safe’] = 1;     
  256.         try {     
  257.             $this->mongo->$dbname->$table_name->remove($condition, $options);  
      
  258.             return true;     
  259.         }     
  260.         catch (MongoCursorException $e)     
  261.         {     
  262.             $this->error = $e->getMessage();     
  263.             return false;     
  264.         }          }     
  265.      
  266.     /**   
  267.     * 查找记录   
  268.     *   
  269.     * 参数:   
  270.     * $table_name:表名   
  271.     * $query_condition:字段查找条件   
  272.     * $result_condition:查询结果限制条件-limit/sort等   
  273.     * $fields:获取字段   
  274.     *   
  275.     * 返回值:   
  276.     * 成功:记录集   
  277.     * 失败:false   
  278.     */     
  279.     function find($table_name, $query_condition, $result_condition=array(), $fields=array())  
      
  280.     {     
  281.         $dbname = $this->curr_db_name;     
  282.         $cursor = $this->mongo->$dbname->$table_name->find($query_condition, $fields);  
      
  283.         if (!emptyempty($result_condition[‘start’]))     
  284.         {     
  285.             $cursor->skip($result_condition[‘start’]);     
  286.         }     
  287.         if (!emptyempty($result_condition[‘limit’]))     
  288.         {     
  289.             $cursor->limit($result_condition[‘limit’]);     
  290.         }     
  291.         if (!emptyempty($result_condition[‘sort’]))     
  292.         {     
  293.             $cursor->sort($result_condition[‘sort’]);     
  294.         }     
  295.         $result = array();     
  296.         try {     
  297.             while ($cursor->hasNext())     
  298.             {     
  299.                 $result[] = $cursor->getNext();     
  300.             }     
  301.         }     
  302.         catch (MongoConnectionException $e)     
  303.         {     
  304.             $this->error = $e->getMessage();     
  305.             return false;     
  306.         }     
  307.         catch (MongoCursorTimeoutException $e)     
  308.         {     
  309.             $this->error = $e->getMessage();     
  310.             return false;     
  311.         }     
  312.         return $result;     
  313.     }     
  314.      
  315.     /**   
  316.     * 查找一条记录   
  317.     *   
  318.     * 参数:   
  319.     * $table_name:表名   
  320.     * $condition:查找条件   
  321.     * $fields:获取字段   
  322.     *   
  323.     * 返回值:   
  324.     * 成功:一条记录   
  325.     * 失败:false   
  326.     */     
  327.     function findOne($table_name, $condition, $fields=array())  
      
  328.     {     
  329.         $dbname = $this->curr_db_name;     
  330.         return $this->mongo->$dbname->$table_name->findOne($condition, $fields);  
      
  331.     }     
  332.      
  333.     /**   
  334.     * 获取当前错误信息   
  335.     *   
  336.     * 参数:无   
  337.     *   
  338.     * 返回值:当前错误信息   
  339.     */     
  340.     function getError()     
  341.     {     
  342.         return $this->error;     
  343.     }     
  344. }     
  345.      
  346. ?>  

由于pdo可以连接现在流行的各种数据库教程,所以单独的写个配置类类来完成不同数据库DSN的配置

    public function getInstance($mongo_server, $flag=array())
    {
        static $mongodb_arr;
        if (empty($flag[‘tag’]))
        {
            $flag[‘tag’] = ‘default’;          }
        if (isset($flag[‘force’]) && $flag[‘force’] == true)
        {
            $mongo = new HMongodb($mongo_server);
            if (empty($mongodb_arr[$flag[‘tag’]])) 
            {
                $mongodb_arr[$flag[‘tag’]] = $mongo;
            }
            return $mongo;
        }
        else if (isset($mongodb_arr[$flag[‘tag’]]) &&
is_resource($mongodb_arr[$flag[‘tag’]]))
        {
            return $mongodb_arr[$flag[‘tag’]];
        }
        else
        {
            $mongo = new HMongodb($mongo_server);
            $mongodb_arr[$flag[‘tag’]] = $mongo;
            return $mongo;
        }
    }


<?php教程
/**
 * 类标准说明    PDO连接数据库的配置类
 * 类名:     ConfigDataBase
 * 功能说明:    为了让代码重用,利用此类可以动态的连接各种数据库
 * 参数说明:    $_dbms =
“mysql教程”;   
//数据库类型
 *         $_host = ‘127.0.0.1’;     //数据库ip地址
 *         $_port = ‘3306’;     //数据库端口
 *         $_username = ‘root’;    //数据库用户名
 *        $_password = ‘liujijun’;   //密码
 *         $_dbname = ‘zendf’;        //数据库名 默认为zenf
 *         $_charset = ‘utf-8’;       //数据库字符编码
 *         $_dsn;//                    //data soruce name 数据源
 *
 *
 * 类属性说明:
 * 类方法说明:
 * 返回值:     不同函数返回不同的值
 * 备注说明:
 * 作者:       刘纪君
 * 最后一次修改时间:    2011下午02:01:39
 *
 */
class ConfigDataBase {
 
 protected static $_dbms = “mysql”;    //数据库类型
    protected static $_host = ‘127.0.0.1’;     //数据库ip地址
    protected static $_port = ‘3306’;     //数据库端口
    protected static $_username = ‘root’;    //数据库用户名
    protected static $_password = ‘liujijun’;   //密码
    protected static $_dbname = ‘zendf’;        //数据库名
默认为zenf
    protected static $_charset = ‘utf-8’;       //数据库字符编码
    protected static $_dsn;//                    //data soruce name
数据源
 
 /**
  *@return   返回数据源名
  */
 public static function getDsn() {
  //将变量的值组合成  mysql:host=localhost;port
=3306;dbname=test’,$login,$passwd的形式
  if (!isset(self::$_dsn)){
    self::$_dsn = self::$_dbms.’:host = ‘.self::$_host.’;prot =
‘.
    self::$_port . ‘;dbname = ‘ . self::$_dbname.’,’.
    self::$_username . ‘,’.self::$_password;
 
    if (strlen(self::$_charset) > 0){
     self::$_dsn = self::$_dsn . ‘;charset = ‘ . self::$_charset;
    }
  }
  return self::$_dsn;//返回数据源名
 }
 
 /**
  * 功能:设置$dbms
  * @param $dbms
  */
 public static function setDbms($dbms){
  if (isset($dbms) &&(strlen($dbms) > 0 )){
   self::$_dbms = trim($dbms);
  }
 }
 
 /**
  *
  * @param  $host  //数据库地址
  */
 public static function setHost($host){
  if (isset($host) &&(strlen($host) > 0 )){
   self::$_host = trim($host);
  }
 }

 /**
  *
  * @param $host 端口号
  */
 public static function setPort($port){
  if (isset($port) &&(strlen($port) > 0 )){
   self::$_post = trim($port);
  }
 }
 
 /**
  *
  * @param  $passwd 密码
  */
 public static function setPasswd($passwd){
  if (isset($passwd) &&(strlen($passwd) > 0 )){
   self::$_password = trim($passwd);
  }
 }
 
 /**
  *
  * @param  $username 用户名
  */
 public static function setUsernName($username){
   if (isset($username) &&(strlen($username) > 0 )){
    self::$_username = trim($username);
   }
  }
 
 /**
  *
  * @param  $dbname 数据库名
  */
 public static function setDbName($dbname){
   if (isset($dbname) &&(strlen($dbname) > 0 )){
    self::$_dbname = trim($dbname);
   }
  }
 
 
  /**
   *
   * @param  $charset 数据库编码
   */
 public static function setCharset($charset){
   if (isset($charset) &&(strlen($charset) > 0 )){
    self::$_charset = trim($charset);
   }
  }
}

下面是对数据库的操作:

 

<?php

require_once ‘ConfigDataBase.php’;
header(“Content-Type: text/html; charset=utf-8”);//设置编码
/**
 * 类标准说明
 * 类名:      PdoMysql
 * 功能说明:     对数据库进行各种操作
 * 参数说明:
 * 类属性说明:
 * 类方法说明:
 * 返回值:
 * 备注说明:
 * 作者:       刘纪君
 * 最后一次修改时间:    2011上午10:45:36
 *
 */
class  PdoMysqlOperater{
 
 
 /**
  * @return 返回连接数据库的句柄
  */
 public function getConnection(){
  $connection = NULL;
  try {
   $connection = new PDO(ConfigDataBase::getDsn());
   echo ‘Success’;
  } catch (PDOException  $e)
{
   print “Error in connection :”.$e->getMessage().’ ‘.die();
  }
  return $connection;
 }
 
 /**
  *
  * @param  $connection    连接数据库的句柄
  */
 public function closeConnection($connection){
  try {
   if ($connection != null) {
    $connection = null;//关闭数据库连接句柄
   }
  } catch (Exception $e) {
   print ‘Close the connectin is error:’.$e->getMessage();
  }
 
 }
 
 /**
  * 功能:      向数据库中增加数据
  * @param $sql      sql语句
  */
 public  function insertDatabase($sql){
  $affect = false;//失败返回false
  try {
   $conn = $this->getConnection();
   $conn->exec($sql);
   $affect = true;//插入成功返回true
   $this->closeConnection($conn);//关闭数据库
  } catch (PDOException $e) {
   print ‘Insert error ‘.$e->getMessage();
  }
  return $affect;//返回值
 }
 
 /**
  *
  * @param $id      表的主键id
  * @param $tableName    表名
  */
 public function deleltById($id,$tableName){
  $affact = false;
  $sql = ‘delete from ‘.trim($tableName).’ where id = ‘.$id;
  try {
   $conn = $this->getConnection();
   $conn->exec($sql);
   $this->closeConnection($conn);
   $affact = true;
  } catch (PDOException  $e) {
   print ‘Delelte error is ‘.$e->getMessage();
  }
  return $affact;
 }
 
 /**
  * 功能:      以and 的形式删除记录
  * @param $tableName    表的名称
  * @param $array        数组表中字段名=其值的方式进行组合
  */
 public  function prepareDeleteAnd($tableName,array $array=null){
  $sql = ‘delete from ‘. $tableName . ‘ where ‘;
  $count = count($array);//计算数组的长度
  $flag = 0;//设置标记

  foreach ($array as $key => $value){
   $flag++;//让flag增加一
   $sql .= $key .’=’.”‘”.$value.”‘”;
   if ($flag != $count
){//当falg不等于count时,数组还有值,后面增加and,反之不增加
    $sql .= ‘ and ‘;
   }
  }
  echo  $sql;//测试sql语句的组合 
  try {
   $conn = $this->getConnection();//获取连接
   $conn->prepare($sql);
   $this->closeConnection();
  } catch (PDOException $e) {
   print ‘Delete error is ‘.$e->getMessage();
  }
 
 }
 

 /**
  * 功能:         以or 的形式删除记录
  * @param $tableName    表的名称
  * @param $array        数组表中字段名=其值的方式进行组合
  */
 public  function prepareDeleteOr($tableName,array $array=null){
 
  $sql = ‘delete from ‘. $tableName . ‘ where ‘;
  $count = count($array);//计算数组的长度
  $flag = 0;//设置标记

  foreach ($array as $key => $value){
   $flag++;//让flag增加一
   $sql .= $key .’=’.”‘”.$value.”‘”;
   if ($flag != $count
){//当falg不等于count时,数组还有值,后面增加and,反之不增加
    $sql .= ‘ or ‘;
   }
  }
  echo  $sql;//测试sql语句的组合 
  try {
   $conn = $this->getConnection();//获取连接
   $stmt = $conn->prepare($sql);
   $stmt->execute();//执行
   $this->closeConnection();
  } catch (PDOException $e) {
   print ‘Delete error is ‘.$e->getMessage();
  }
 
 }
 
 
 /**
  * 功能:      取得表中所有数据
  * @param  $sql     sql语句
  */
 public function getAll($sql){
 
  $result = null;
  try {
   $conn = $this->getConnection();
   $result = $conn->query($sql);
   $this->closeConnection($conn);
  } catch (PDOException $e) {
   print ‘GetAll error is ‘.$e->getMessage();
  }
 }
 
 
 /**
  * 功能:更新数据表中的信息
  * @param  $table      要更新的表名
  * @param array $updateFiled    要更新的字段
  * @param array $updateConditon 更新需要的条件
  */
 public function updateDataBase($table,array $updateFiled,array
$updateConditon ){
  
  $sql   = ‘update from ‘ .$table .’ set ‘;
 
  //对set字段进行赋值操作
  $count = count($updateFiled);//获取要修改数组的长度
  $flag  = 0;//设置标记为0
  foreach ($updateFiled as $key => $value){
   $flag++;
   $sql .= $key .’=’.”‘”.$value.”‘”;
   if ($flag != $count){
    $sql .=’,’;
   }
  }
  //对where条件进行赋值
  $countUpdateCondition =
count($updateConditon);//获取要修改数组的长度
  $flag  = 0;//设置标记为0
  $sql .= ‘ where ‘;
  foreach ($updateConditon as $key => $value){
   $flag++;
   $sql .= $key .’=’.”‘”.$value.”‘”;
   if ($flag != $countUpdateCondition){
    $sql .=’ and ‘;
   }
  }
  try {
   $conn = $this->getConnection();
   $conn->exec($sql);
   $this->closeConnection($conn);
  } catch (PDOException $e) {
   print ‘Update error is :’.$e->getMessage();
  }
 
 }
 
 
 /**
  * 功能:      根据表和提高的查询条件进行查询
  * 返回值:      返回结果集
  * @param  $table    数据表名
  * @param array $findCondition  查询条件
  */
 public function findData($table,array $findCondition){
 
  $sql = ‘select from ‘.$table
.’ where ‘;
 
  $count = count($findCondition);//获取查询条件数组的长度
  $flag  = 0;//设置标记为0
  foreach ($findCondition as $key => $value){
   $flag++;
   $sql .= $key .’=’.”‘”.$value.”‘”;
   if ($flag != $count){
    $sql .=’ and ‘;
   }
  }
  try {
    $conn = $this->getConnection();
    $conn->exec($sql);
    $this->closeConnection($conn);
   } catch (PDOException $e) {
    print ‘find error is :’.$e->getMessage();
   }
  
  }
}
//测试

$db = new PdoMysqlOperater();
$db->findData(‘liujijun’,array(‘name’=>’liujijun’,’name1’=>’liujijun’));

    /**
     * 构造函数
     * 支持传入多个mongo_server(1.一个出问题时连接其它的server
2.自动将查询均匀分发到不同server)
     *
     * 参数:
     * $mongo_server:数组或字符串-array(“127.0.0.1:1111”,
“127.0.0.1:2222”)-“127.0.0.1:1111”
     * $connect:初始化mongo对象时是否连接,默认连接
     * $auto_balance:是否自动做负载均衡,默认是
     *
     * 返回值:
     * 成功:mongo object
     * 失败:false
     */
    private function __construct($mongo_server, $connect=true,
$auto_balance=true)
    {
     if (is_array($mongo_server))
     {
      $mongo_server_num = count($mongo_server);
      if ($mongo_server_num > 1 && $auto_balance)
      {
       $prior_server_num = rand(1, $mongo_server_num);
       $rand_keys = array_rand($mongo_server,$mongo_server_num);
       $mongo_server_str = $mongo_server[$prior_server_num-1];
       foreach ($rand_keys as $key)
       {
        if ($key != $prior_server_num – 1)
        {
         $mongo_server_str .= ‘,’ . $mongo_server[$key];
        }
       }
      }
      else
      {
       $mongo_server_str = implode(‘,’, $mongo_server);
      }                  }
      else
      {
       $mongo_server_str = $mongo_server;
      }
      try {
       $this->mongo = new Mongo($mongo_server,
array(‘connect’=>$connect));
      }
      catch (MongoConnectionException $e)
      {
       $this->error = $e->getMessage();
       return false;
      }
    }

    /**
    * 连接mongodb server
    *
    * 参数:无
    *
    * 返回值:
    * 成功:true
    * 失败:false
    */
    public function connect()
    {
        try {
            $this->mongo->connect();
            return true;
        }
        catch (MongoConnectionException $e)
        {
            $this->error = $e->getMessage();
            return false;
        }
    }    

    /**
    * select db
    *
    * 参数:$dbname
    *
    * 返回值:无
    */
    public function selectDb($dbname)
    {
        $this->curr_db_name = $dbname;
    }    

    /**
    * 创建索引:如索引已存在,则返回。
    *
    * 参数:
    * $table_name:表名
    * $index:索引-array(“id”=>1)-在id字段建立升序索引
    * $index_param:其它条件-是否唯一索引等
    *
    * 返回值:
    * 成功:true
    * 失败:false
    */
    public function ensureIndex($table_name, $index,
$index_param=array())
    {
        $dbname = $this->curr_db_name;
        $index_param[‘safe’] = 1;
        try {
           
$this->mongo->$dbname->$table_name->ensureIndex($index,
$index_param);
            return true;
        }
        catch (MongoCursorException $e)
        {
            $this->error = $e->getMessage();
            return false;
        }
    }

    /**
    * 插入记录
    *
    * 参数:
    * $table_name:表名
    * $record:记录
    *
    * 返回值:
    * 成功:true
    * 失败:false
    */
    public function insert($table_name, $record)
    {
        $dbname = $this->curr_db_name;
        try {
           
$this->mongo->$dbname->$table_name->insert($record,
array(‘safe’=>true));
            return true;
        }
        catch (MongoCursorException $e)
        {
            $this->error = $e->getMessage();
            return false;
        }
    }    

    /**
    * 查询表的记录数
    *
    * 参数:
    * $table_name:表名
    *
    * 返回值:表的记录数
    */
    public function count($table_name)
    {
        $dbname = $this->curr_db_name;
        return
$this->mongo->$dbname->$table_name->count();
    }    

    /**
    * 更新记录
    *
    * 参数:
    * $table_name:表名
    * $condition:更新条件
    * $newdata:新的数据记录
    * $options:更新选择-upsert/multiple
    *
    * 返回值:
    * 成功:true
    * 失败:false
    */
    public function update($table_name, $condition, $newdata,
$options=array())
    {
        $dbname = $this->curr_db_name;
        $options[‘safe’] = 1;
        if (!isset($options[‘multiple’]))
        {
            $options[‘multiple’] = 0;          }
        try {
           
$this->mongo->$dbname->$table_name->update($condition,
$newdata, $options);
            return true;
        }
        catch (MongoCursorException $e)
        {
            $this->error = $e->getMessage();
            return false;
        }
    }    

    /**
    * 删除记录
    *
    * 参数:
    * $table_name:表名
    * $condition:删除条件
    * $options:删除选择-justOne
    *
    * 返回值:
    * 成功:true
    * 失败:false
    */
    public function remove($table_name, $condition, $options=array())
    {
        $dbname = $this->curr_db_name;
        $options[‘safe’] = 1;
        try {
           
$this->mongo->$dbname->$table_name->remove($condition,
$options);
            return true;
        }
        catch (MongoCursorException $e)
        {
            $this->error = $e->getMessage();
            return false;
    }   }    

    /**
    * 查找记录
    *
    * 参数:
    * $table_name:表名
    * $query_condition:字段查找条件
    * $result_condition:查询结果限制条件-limit/sort等
    * $fields:获取字段
    *
    * 返回值:
    * 成功:记录集
    * 失败:false
    */
    public function find($table_name, $query_condition,
$result_condition=array(), $fields=array())
    {
        $dbname = $this->curr_db_name;
        $cursor =
$this->mongo->$dbname->$table_name->find($query_condition,
$fields);
        if (!empty($result_condition[‘start’]))
        {
            $cursor->skip($result_condition[‘start’]);
        }
        if (!empty($result_condition[‘limit’]))
        {
            $cursor->limit($result_condition[‘limit’]);
        }
        if (!empty($result_condition[‘sort’]))
        {
            $cursor->sort($result_condition[‘sort’]);
        }
        $result = array();
        try {
            while ($cursor->hasNext())
            {
                $result[] = $cursor->getNext();
            }
        }
        catch (MongoConnectionException $e)
        {
            $this->error = $e->getMessage();
            return false;
        }
        catch (MongoCursorTimeoutException $e)
        {
            $this->error = $e->getMessage();
            return false;
        }
        return $result;
    }    

    /**
    * 查找一条记录
    *
    * 参数:
    * $table_name:表名
    * $condition:查找条件
    * $fields:获取字段
    *
    * 返回值:
    * 成功:一条记录
    * 失败:false
    */
    public function findOne($table_name, $condition, $fields=array())
    {
        $dbname = $this->curr_db_name;
        return
$this->mongo->$dbname->$table_name->findOne($condition,
$fields);
    }    

    /**
    * 获取当前错误信息
    *
    * 参数:无
    *
    * 返回值:当前错误信息
    */
    public function getError()
    {
        return $this->error;
    }

    /*** Mongodb类** examples:
     * $mongo = new HMongodb(“127.0.0.1:11223”);
    * $mongo->selectDb(“test_db”);
    * 创建索引
    * $mongo->ensureIndex(“test_table”, array(“id”=>1),
array(‘unique’=>true));
    * 获取表的记录
    * $mongo->count(“test_table”);
    * 插入记录
    * $mongo->insert(“test_table”, array(“id”=>2,
“title”=>”asdqw”));
    * 更新记录
    * $mongo->update(“test_table”,
array(“id”=>1),array(“id”=>1,”title”=>”bbb”));
    * 更新记录-存在时更新,不存在时添加-相当于set
    * $mongo->update(“test_table”,
array(“id”=>1),array(“id”=>1,”title”=>”bbb”),array(“upsert”=>1));
    * 查找记录
    * $mongo->find(“c”, array(“title”=>”asdqw”),
array(“start”=>2,”limit”=>2,”sort”=>array(“id”=>1)))
    * 查找一条记录
    * $mongo->findOne(“$mongo->findOne(“ttt”,
array(“id”=>1))”, array(“id”=>1));
    * 删除记录
    * $mongo->remove(“ttt”, array(“title”=>”bbb”));
    * 仅删除一条记录
    * $mongo->remove(“ttt”, array(“title”=>”bbb”),
array(“justOne”=>1));
    * 获取Mongo操作的错误信息
    * $mongo->getError();
    */

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注