dongshi4589 2017-06-05 08:36
浏览 44
已采纳

从函数返回数据库连接

I'm trying to return $db connection from function, so that I could use it in another function. But someone functions don't understand $db variable.

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();
   }
}

Then use it in all of my functions.

function getCurrentFile(){
   dbConnection();

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

}

Are there more preferable way to handle db connections? I used to require_once config.php(where is only db connection) file every time, but I don't want to do it anymore.

  • 写回答

2条回答 默认 最新

  • donglian6625 2017-06-05 08:51
    关注

    One of the options is define singletone class providing database object:

    // 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()
        {
    
        }
    }
    

    If you are using composer tool, add this line to composer.json file:

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

    In your project, on bootstrap include generated by composer vendor/autoload.php file and start using class by:

    use DbConnection;
    
    DbConnection::getInstance();
    

    in whole projec.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿