Skip to content
Snippets Groups Projects
class_db_pdo_statement.php 1.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    <?php
    
    /**
    * Copyright Maarch since 2008 under licence GPLv3.
    * See LICENCE.txt file at the root folder for more details.
    * This file is part of Maarch software.
    *
    */
    
    /**
    * @brief class db pdo statement
    * @author dev@maarch.org
    * @ingroup core
    */
    
    
    require_once 'class_db_pdo.php';
    
    class MyPDOStatement
    {
        private $pdoStatement;
        public $queryArgs;
    
        public function __construct($pdoStatement)
        {
            $this->pdoStatement = $pdoStatement;
        }
    
        public function __call($method, array $args=array())
        {
            if ($method == 'rowCount') {
                return $this->nbResult();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            } elseif ($method == 'fetchObject') {
                return $this->fetchMyObject();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            } else {
                return call_user_func_array(array($this->pdoStatement, $method), $args);
            }
        }
    
        protected function nbResult()
        {
            $db = new Database();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            switch ($db->driver) {
                case 'pgsql'   : 
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    return $this->pdoStatement->rowCount();
                default :
                    $query = "select count(1) as rc from (" . $this->pdoStatement->queryString . ")";
                    $stmtRC = $db->query($query, $this->queryArgs); 
                    $fetch = $stmtRC->fetchObject();
                    return $fetch->rc;
            }
        }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    
        protected function fetchMyObject()
        {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
            $db = new Database();
            switch ($db->driver) {
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                case 'pgsql'   :
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    //see later if special cases
                    return $this->pdoStatement->fetchObject();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                default :
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    $result = $this->pdoStatement->fetchObject();
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                    if ($result) {
                        foreach ($result as $name => $value) {
                            if (gettype($value) == 'resource') {
                                $result->$name = stream_get_contents($value);
                            }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
                        }
                    }
                    return $result;
            }
        }
    
    Giovannoni Laurent's avatar
    Giovannoni Laurent committed
    }