将mysql连接移出到另一个类

时间:2012-03-09 16:43:50

标签: php mysql pdo

在此课程之外移动数据库连接的最佳方法是什么。这样每次执行只有一个连接。此外,欢迎对以下代码进行任何改进。

<?php

    $DatabaseConfig = array(
        'username'  =>  'root',
        'password'  =>  'root',
        'host'      =>  'localhost',
        'database'  =>  'live'
    );

    define('APPPATH', '/var/www/');

    require_once APPPATH.'lib/KLogger.php';

    class BaseModel {

/**
 * var $klogger object klogger instance  
 */
        protected $Klogger;

/**
 * var $Mysqli object mysqli instance  
 */
        protected $DBH;

/**
 * function to initiate logger and database
 */         

        function __construct()
        {
            $this->Klogger  = KLogger::instance(APPPATH.'tmp/logs/mysql/', KLogger::INFO);

            $this->initDb();
        }

/**
 * function to initiate database
 */         
        protected function initDb()
        {
            global $DatabaseConfig;


            try{
                $this->DBH = new PDO("mysql:host=".$DatabaseConfig['host'].";dbname=".$DatabaseConfig['database'], 
                                    $DatabaseConfig['username'], $DatabaseConfig['password']);

            }
            catch(PDOException $e){
                 $this->Klogger->logError($e->getMessage());
                 exit;
            };


        }
/**
 * function to initiate database
 */
        protected function fetch($query,$data = array())
        {
            try
            {
                $STH = $this->DBH->prepare($query);
                $STH->execute();

                $result = array();
                while($row = $STH->fetch(PDO::FETCH_ASSOC)) {  
                    $result[] =$row;
                }
                return $result;
            }
            catch(Exception $e){

                 $this->Klogger->logError($e->getMessage().' \n Query : '.$query);
                 return false;
            };

        }
/**
 * function to save to database
 */
        protected function save($query,$data = array())
        {

            try
            {
                if(empty($data))
                {
                     throw new Exception('Data Not Passed To save');
                }
                $STH = $this->DBH->prepare($query);
                $STH->execute($data);
                return true;

            }
            catch(Exception $e){

                 $this->Klogger->logError($e->getMessage().' \n Query : '.$query);
                 return false;
            };

        }
    }
?>


<?php

require_once 'base_model.php';

class profile extends BaseModel
{
    function test()
    {

        $data   = $this->fetch("SELECT * FROM users");

        $result = $this->save("INSERT INTO users (name, age) VALUES (?,?)",array("tow",1)); 

        var_dump($data);

        var_dump($result);

    }
}

$profile = new profile();
$profile->test();
?>

2 个答案:

答案 0 :(得分:1)

您应该查看Singleton Design PatternHere's数据库连接单例的一个例子。

答案 1 :(得分:0)

在课堂外移动数据库东西似乎不是一个好的解决方案。尝试使用Singleton模式:http://en.wikipedia.org/wiki/Singleton_pattern

相关问题