-1

我有一个 config.php 文件,其中包含一些全局变量:基本上它们中的大多数都与连接到我的数据库有关。

一个例子:

$WEBDBHOST = 'localhost';
$WEBDBPORT = '3306';
$WEBDBNAME = 'db';
$WEBDBUSERNAME = 'root';
$WEBDBPASSWORD = '' ;

大多数时候它的使用如下:

$dbw = new PDO("mysql:host=$WEBDBHOST;port=$WEBDBPORT;dbname=$WEBDBNAME", $WEBDBUSERNAME, $WEBDBPASSWORD);

这对我来说根本没有效率!如何改进我的代码?我应该创建某种包含全局变量的数据库层并创建某种返回新 pdo 对象的 getWEBDB() 吗?

或者有没有更好的方法来解决这个问题?请记住,我有多个数据库,所以我在考虑 getWebDB()、getGameDB() 等。

4

1 回答 1

0

是的,您应该创建一个数据库层。大家应该。

不,不是因为“配置文件中有很多全局变量”。事实上,应该只有一个全局变量

$cfg['db']['game']['host']    = 'localhost';
$cfg['db']['game']['port']    = '3306';
$cfg['db']['game']['base']    = 'db';
$cfg['db']['game']['user']    = 'root';
$cfg['db']['game']['pass']    = '';
$cfg['db']['game']['charset'] = 'utf8';

现在您可以将所需的配置选项传递给这样的类

$gamedb = new DBLayer($cfg['game']);

并有这样的构造函数

function __construct($db)
{
    $dsn  = "mysql:";
    $dsn .= "host=".   $db['host'].";";
    $dsn .= "dbname=". $db['name'].";";
    $dsn .= "port=".   $db['port'].";";
    $dsn .= "charset=".$db['charset'];

    $opt = array(
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    );
    return new PDO($dsn,$db['user'],$db['pass'], $opt);
}
于 2013-06-27T05:42:20.887 回答