2017-06-05 10 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(); 

} 

db接続を処理するより好ましい方法はありますか?私はrequire_once config.php(ここではdb接続のみ)ファイルを毎回使用していましたが、もうこれをやりたくありません。

+0

クラスを使用して見たいかもしれません。 –

+0

クラスを使用し、PDO接続を確立する構造関数を持っています。そこから、あなたはクラス内と外のどこでもそれを使用することができます – Akintunde007

+0

セキュリティに関して多くの落とし穴があるので、独自のデータベースコードを実行するのではなく、試されたdb-abstractionライブラリを使うことをお勧めします。 –

答えて

1

選択肢の一つは、データベース・オブジェクトを提供singletoneクラス定義である:あなたのプロジェクトで

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

:、あなたが作曲ツールを使用している場合は

// 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.phpファイルで生成されたブートストラップインクルードで、次のようにクラスを使い始める:

use DbConnection; 

DbConnection::getInstance(); 
全部で

です。

0

クラスのdb接続コードを書き留め、システム内の他の場所で使用するオブジェクトを作成します。

関連する問題