Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Sep 1st, 2010 | Syntax: PHP | Size: 5.39 KB | Hits: 38 | Expires: Never
Copy text to clipboard
  1. <?php
  2.  
  3. class dbmcPDO
  4. {
  5.     /**
  6.      * PDO Connection object.
  7.      * @var object
  8.      */
  9.     private $_oPDO;
  10.  
  11.     /**
  12.      * Connection details
  13.      * @var array
  14.      */
  15.     private $_aCD;
  16.  
  17.     /**
  18.      * Statement and parameters query stack.
  19.      * @var array
  20.      */
  21.     private $_aQueryStack = array();
  22.  
  23.     /**
  24.      * Results stack.
  25.      * @var array
  26.      */
  27.     private $_aResultStack = array();
  28.  
  29.     /**
  30.      * Flag for transation in use.
  31.      * @var boolean
  32.      */
  33.     private $_bTransaction = false;
  34.  
  35.     /**
  36.      * Flag for commit process is taking place.
  37.      * @var boolean
  38.      */
  39.     private $_bCommit = false;
  40.  
  41.     /**
  42.      * Raises flag to call PDO beginStatement method
  43.      * during query.
  44.      * @return boolean Always true.
  45.      */
  46.     public function beginTransaction()
  47.     {
  48.        $this->_bTransaction = true;
  49.        return true;
  50.     }
  51.  
  52.     /**
  53.      * Raises flag to operate commit method for stacked transaction queries.
  54.      * @return boolean Always true.
  55.      */
  56.     public function commit()
  57.     {
  58.         $this->_bCommit = true;
  59.         return $this->query();
  60.     }
  61.  
  62.     /**
  63.      * Query method to stack if transation or outright execute SQL prepared
  64.      * statement.
  65.      * @param string $sStatement
  66.      * @param string $aParams
  67.      * @return mixed False or result array.
  68.      */
  69.     public function query($sStatement=null, $aParams=array())
  70.     {
  71.         $this->_aResultStack = array();
  72.        
  73.         if (is_null($this->_oPDO))
  74.                 return false;
  75.        
  76.         if($this->_bTransaction && !$this->_bCommit)
  77.         {
  78.             $this->_aQueryStack[] = array($sStatement, $aParams);
  79.             return;
  80.         }
  81.        
  82.         try {
  83.             $this->_oPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  84.  
  85.             if($this->_bTransaction && $this->_bCommit)
  86.             {
  87.                     $this->_oPDO->beginTransaction();  
  88.             }
  89.                 else
  90.             {
  91.                 $this->_aQueryStack[] = array($sStatement, $aParams);
  92.             }
  93.  
  94.             foreach($this->_aQueryStack as $aQuery)
  95.             {
  96.                 $sStatement = $this->_oPDO->prepare($aQuery[0]);
  97.                 foreach($aQuery[1] as $k => $v)
  98.                 {
  99.                     $sStatement->bindParam(':' . $k, $v[0], $v[1], isset($v[2]) ? $v[2] : null);
  100.                 }
  101.  
  102.                 if($sStatement->execute())
  103.                 {
  104.                     $aStmtType = explode(' ', $aQuery[0]);
  105.                     $sStmtType = $aStmtType[0];
  106.  
  107.                     switch(strtoupper($sStmtType))
  108.                     {
  109.                         case 'SELECT':
  110.                             $this->_aResultStack[] = $sStatement->fetchAll(PDO::FETCH_ASSOC);
  111.                             break;
  112.                        
  113.                         case 'INSERT':
  114.                             $this->_aResultStack[] =  $this->_oPDO->lastInsertId();
  115.                             break;
  116.  
  117.                         default:
  118.                             $this->_aResultStack[] = true;
  119.                             break;
  120.                     }
  121.                 }
  122.                     else
  123.                 {
  124.                    $this->_aResultStack[] = false;
  125.                 }
  126.             }
  127.  
  128.             $this->_aQueryStack = array();
  129.  
  130.             if($this->_bTransaction && $this->_bCommit)
  131.             {
  132.                 $this->_oPDO->commit();
  133.             }
  134.         }
  135.             catch(PDOException $e)
  136.         {
  137.             if($this->_bTransaction && $this->_bCommit)
  138.             {
  139.                 $this->_oPDO->rollback();
  140.             }
  141.            
  142.             $this->_aResultStack = array();
  143.             echo $e->getMessage();
  144.             return false;
  145.         }
  146.  
  147.         $this->_bCommit = false;
  148.         $this->_bTransaction = false;
  149.         return $this->_aResultStack;
  150.     }
  151.  
  152.     /**
  153.      * Executes connection object.
  154.      * @param string $sDB
  155.      * @param string $sTable
  156.      * @return boolean True on success, false on failure.
  157.      */
  158.     public function connect($sDB, $sTable)
  159.     {
  160.         if (is_null($this->_aCD))
  161.                 $this->fetchConfig($sDB);
  162.        
  163.         try {
  164.             $this->_oPDO = new PDO('mysql:host=' . $this->_aCD['s_address'] . ';dbname=' . $this->_aCD['s_db'], $this->_aCD['s_user'], $this->_aCD['s_pass']);
  165.             $this->_aCD = null; // Clear out config, ideal?
  166.             return true;
  167.         }
  168.             catch(PDOException $e)
  169.         {
  170.             echo $e->getMessage();
  171.             return false;
  172.         }
  173.     }
  174.  
  175.     /**
  176.      * Fetch config fetches config file and loads up the appropriate config
  177.      * data array for the database being requested.
  178.      * @param string $sAlias
  179.      * @return boolean True on success, false on failure.
  180.      */
  181.     private function fetchConfig($sAlias)
  182.     {
  183.         if(isset($sAlias))
  184.         {
  185.             $sAlias = $sAlias."_";
  186.             $sFile = 'configs/config.do';
  187.  
  188.             if(file_exists($sFile))
  189.             {
  190.                 require($sFile);
  191.                 $array = $sAlias ."db_config";
  192.                 $this->_aCD = ${$array};
  193.                
  194.                 return true;
  195.             }
  196.                 else
  197.             {
  198.                return false;
  199.             }
  200.         }
  201.             else
  202.         {
  203.             return false;
  204.         }
  205.  
  206.         return false;
  207.     }
  208. }