2017-06-05 103 views
2

我想从函数返回$ 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(其中只有db连接)文件,但我不想再这样做。

+0

你可能想看看使用类 –

+0

然后使用一个类,有一个构造函数来建立PDO连接。从那里,你将能够在课堂以外的任何其他地方使用它 – Akintunde007

+0

我建议使用经过验证和测试的db抽象库而不是运行自己的数据库代码,因为在安全性等方面存在很多缺陷。 –

回答

1

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

// 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.json文件:

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

在你的项目中,自举包含由composer vendor/autoload.php文件生成并开始使用类:

use DbConnection; 

DbConnection::getInstance(); 
整个项目中的

0

在类中记下你的db连接代码,并创建对象以便在系统中的其他任何地方使用。