我对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);
答案 0 :(得分: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);
答案 1 :(得分:0)
接受回答的问题是,您将最终将每个函数作为参数跟踪数据库。这导致更长的参数列表,当你得到更多的东西开始看起来很乱。
另一种方法是创建一个可以调用的Singleton来获取数据库连接,例如通常大型项目将使用它不仅仅是访问数据库,但这是一个简单的例子
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;
}
}
然后你只需调用返回pdo对象的DatabaseProvider::getInstance()
答案 2 :(得分:-2)
使用包含文件...
放置变量,甚至在include中创建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);