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 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥15 帮我写一个c++工程