1

私はPDOに非常に新しいです。以下の関数を作成しましたが、グローバルデータベース($ dbo)を持つことは悪い考えだと読みました。コードは機能し、私が望むものも出力します。改善/修正する方法について何か提案はありますか?

function langString($lang_id) { 
    global $dbo;
    $lang_result=$dbo->prepare("SELECT lang_string FROM lang WHERE lang_id=:lang_id");
    $lang_result->bindParam(":lang_id",$lang_id,PDO::PARAM_INT,3);
    if($lang_result->execute()){ 
        $lang_row = $lang_result->fetch(PDO::FETCH_OBJ);
        echo "<br><br>$lang_row->lang_string";
    }
}

echo langString(3);
4

3 に答える 3

3

変数を引数として関数に渡します

function langString($lang_id, $dbo) {   
    $lang_result=$dbo->prepare("SELECT lang_string FROM lang WHERE lang_id=:lang_id");
    $lang_result->bindParam(":lang_id",$lang_id,PDO::PARAM_INT,3);
    if($lang_result->execute()){ 
        $lang_row = $lang_result->fetch(PDO::FETCH_OBJ);
        echo "<br><br>$lang_row->lang_string";
    }
}

echo langString(3, $dbo);
于 2012-09-09T01:08:13.310 に答える
0

受け入れられた答えのキャッチは、パラメーターとしてすべての関数のラウンドでデータベースを追跡することになるということです。これにより、パラメーターのリストが長くなり、より多くのものを取得すると、乱雑に見え始めます。

別の方法は、データベース接続を取得するために呼び出すことができるシングルトンを作成することです。たとえば、通常、大規模なプロジェクトでは、DB へのアクセス以外にもこれを使用しますが、簡単な例を次に示します。

class DatabaseProvider {
     private static $database;
     private $dbo;
     private function __construct() {
         //Here's where you do your PDO connection creation
         $this->dbo= new PDO()....;
     }
     public static function getDatabase() {
         if(!isset(self::$database) {
               self::$database = new DatabaseProvider();
         }
         return $database->dbo;
     }
}

DatabaseProvider::getInstance()次に、 pdo オブジェクトを返すを呼び出すだけです

于 2012-09-09T01:36:38.047 に答える
-2

Use an include file...

Put your variables or even create a db object in the include, and then you can call it from anywhere.

function langString($lang_id) { 

    include($_SERVER['DOCUMENT_ROOT']."/dbconnect.php"); //Put your vars in this document

    $lang_result=$dbo->prepare("SELECT lang_string FROM lang WHERE lang_id=:lang_id");
    $lang_result->bindParam(":lang_id",$lang_id,PDO::PARAM_INT,3);
    if($lang_result->execute()){ 
        $lang_row = $lang_result->fetch(PDO::FETCH_OBJ);
        echo "<br><br>$lang_row->lang_string";
    }
}

echo langString(3);
于 2012-09-09T01:17:21.407 に答える