从函数返回数据库连接

时间:2017-06-05 08:36:10

标签: php pdo

我正在尝试从函数返回$ db连接,以便我可以在另一个函数中使用它。但有些函数不理解$ db变量。

function dbConnection(){
   $dbhost = 'localhost';
   $dbuser = '...';
   $dbpass = '...';
   $dbname = '...';

   try {
     $db = new PDO("mysql:host=$dbhost;dbname=$dbname;charset=UTF8", $dbuser, $dbpass);
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     return $db;
   } catch (PDOException $e){
     echo 'Connection failed: ' . $e->getMessage();
   }
}

然后在我的所有功能中使用它。

function getCurrentFile(){
   dbConnection();

   $stmt = $db->prepare(...);
   $stmt->execute();

}

是否有更好的方法来处理数据库连接?我以前每次都需要require_once config.php(其中只有数据库连接)文件,但我不想再这样做了。

2 个答案:

答案 0 :(得分:1)

其中一个选项是定义提供数据库对象的单一类:

// File: DbConection.php

class DbConnection
{

    /**
     * @var \PDO
     */
    private static $pdo;


    private function __constructor()
    {

    }

    public static function getInstance()
    {
        if(null === self::$pdo) {
            self::$pdo = new \PDO('....);
        }

        return $self::pdo;
    }

    private function __clone()
    {

    }

    private function __wakeup()
    {

    }
}

如果您使用的是composer工具,请将此行添加到composer.json文件中:

"autoload": {
    "classmap": [
        "path_to_your_file/DbConnection.php"
    ]
},

在你的项目中,on bootstrap include由composer vendor / autoload.php文件生成并开始使用class by:

use DbConnection;

DbConnection::getInstance();

在整个项目中。

答案 1 :(得分:0)

在类中记下您的数据库连接代码,并创建对象以用于系统中的其他任何位置。