首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从函数中删除全局

从函数中删除全局
EN

Stack Overflow用户
提问于 2012-09-09 09:05:57
回答 3查看 84关注 0票数 1

我对PDO非常陌生。我创建了下面的函数,但我读到拥有全局数据库($dbo)不是一个好主意。代码也可以工作并输出我想要的东西。对如何改进/修复有什么建议吗?

代码语言:javascript
运行
复制
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);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-09 09:08:13

将变量作为参数传递给函数

代码语言:javascript
运行
复制
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);
票数 3
EN

Stack Overflow用户

发布于 2012-09-09 09:36:38

可接受的答案的问题是,您最终将以参数的形式跟踪数据库中的每个函数。这会导致更长的参数列表,并且当你得到更多的东西时,开始看起来很混乱。

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

代码语言:javascript
运行
复制
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对象

票数 0
EN

Stack Overflow用户

发布于 2012-09-09 09:17:21

使用包含文件...

把你的变量或者甚至在include中创建一个db对象,然后你就可以从任何地方调用它了。

代码语言:javascript
运行
复制
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);
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12335738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档