Troutfisher
Troutfisher

Reputation: 69

Return database connection from function

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.

Upvotes: 2

Views: 1529

Answers (2)

VirCom
VirCom

Reputation: 3622

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.

Upvotes: 1

Pradeep Singh
Pradeep Singh

Reputation: 87

Write down your db connection code in class and create object to use everywhere else in your system.

Upvotes: 0

Related Questions