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

接受答案的问题是,您最终将在每个函数中作为参数跟踪数据库。这会导致更长的参数列表,并且随着您获得更多的东西开始看起来很乱。

另一种方法是创建一个单例,您可以调用它来获取数据库连接,例如,通常大型项目将使用它来不仅仅是访问数据库,但这里有一个简单的示例

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()which 返回 pdo 对象

于 2012-09-09T01:36:38.047 回答
-2

使用包含文件...

将您的变量甚至在包含中创建一个 db 对象,然后您可以从任何地方调用它。

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 回答