-1

我有一个简单的问题要问你们,我创建了 CFG 文件,它将我的数据库连接详细信息存储在二维数组中。然后我将它连接到我的 PHP 类文件并使其启动 CFG 文件中所述的数组。正如您在我的代码中看到的那样:

配置文件

 <?php
   $cfg['db']['host'] = 'localhost';
   $cfg['db']['user'] = 'root'; //your user name
   $cfg['db']['pass'] = ''; //your password 
   $cfg['db']['db'] = 'db3'; //your database
 ?>

和我的课程文件:

 <?php

     require_once(dirname(__FILE__) . 'cfg.php');

class Database {

    private $dbConn; //stores the database connection

   public function __construct($dbConn)
     {
    global $cfg;
    mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die('Could not connect to MySQL server.');
    mysql_select_db(DB_DATABASE)or die('Unable to select database: ');
    }



}

我想问你的是:这是正确的做法吗?我还需要在我的索引中添加什么以查看它是否已连接。以及数据库内容的输出。提前感谢您抽出时间阅读我的问题。干杯。

编辑 :

      <?php

        require_once(dirname(__FILE__) . 'cfg.php');

  class Database {

     private $dbConn; //stores the database connection

public function __construct($dbConn)
{
    global $cfg;
    mysqli_connect($cfg['db']['host'], $cfg['db']['user'], $cfg['db']['pass'])
    or die('Could not connect to MySQL server.');
    mysqli_select_db($dbConn, $cfg['db']['db'])
    or die('Unable to select database: ');
}


}

现在看起来更好了吗?如果是。我如何将它与将存储我的表单的 index.php 文件连接起来。说输出(连接到数据库)的消息。谢谢你。

编辑:更改为 mysqli,现在在选择数据库时,它指出我缺少数据库名称。不知道把它放在哪里以及如何改变它。谢谢你。

编辑:我正在为 'Select' 'Insert' 和 'Delete' 创建函数。如果你们中的任何人能指出我做一个很好的信息来源,这将有助于我的研究,那将不胜感激。

4

2 回答 2

0

不,你没有正确地做到这一点。通过使用这条线

require_once(dirname(__FILE__) . 'cfg.php');

在您的类文件中,您引入了与配置文件的某种紧密耦合,并且很难将其换成其他凭据。即,您必须更改其中包含数据库类的文件才能更改凭据。因此,首先将包含的内容放在那里。

您要做的另一件事是使用global尽可能远离 OOP 的关键字。而是注入班级需要的信息。

此外,您正在使用古老的、已弃用且即将被删除的mysql_*API。您还调用了某些失败(or die())的脚本的执行,这使得无法将您的代码集成到项目中,并且也无法正确处理错误(即自定义错误页面)。

当升级到更好的数据库 API(例如 PDO)时,您甚至根本不需要使用数据库类。

上面的内容看起来像下面这样:

引导程序.php

try {
    $dbConnection = new \PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');

    $dbConnection->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
    $dbConnection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
} catch (\PDOException $e) {
    // nicely handle error here
}

或者,您可以根据您的要求为数据库连接实现延迟加载。正如您现在看到的,不需要外部配置文件(您可以在引导文件中更改凭据),也不需要数据库类。

于 2013-11-03T12:54:07.733 回答
0

您在mysql_connect()函数中使用常量而不是配置中的实际值,因此这是行不通的。你需要这样做:

mysql_connect($cfg['db']['host'], $cfg['db']['user'], $cfg['db']['pass'])

除了那个和 OO 范例之外,如果您使用 PHP 的 mysqli (如此处所述)或PDO可能会更好,因为 PHPmysql_已经过时了。

于 2013-11-03T12:23:10.347 回答