是我的cfg.php连接吗?

时间:2013-11-03 12:12:20

标签: php database oop

我有一个快速提问你们,我已经创建了CFG文件,它将我的数据库连接细节存储在二维数组中。然后我将它连接到我的PHP类文件,并使其启动CFG文件中声明的数组。正如您在我的代码中所见:

cfg.php

 <?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: ');
    }



}

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

编辑:

      <?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,现在选择数据库时,它表明我缺少数据库名称。不确定放在哪里以及如何改变它。谢谢。

编辑:我正在为“选择”“插入”和“删除”创建功能。如果你们中的任何一个人能指出我做一个很好的信息来源,这将有助于我的研究,我将非常感激。

2 个答案:

答案 0 :(得分:0)

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

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

除了那个和OO范例之外,如果你使用PHP的mysqli(as stated here)或PDO可能会更好,因为PHP的mysql_已经过时了。

答案 1 :(得分:0)

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

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

在您的类文件中,您已经引入了与配置文件稍微紧密的耦合,并且您很难将其替换为其他凭据。即您必须使用其中的Database类更改文件以更改凭据。所以首先要删除那里的内容。

您要做的另一件事是使用global keyword which is as far from OOP as you could possibly get。注入课程所需的信息。

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

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

以上内容如下所示:

bootstrap.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
}

或者,您可以根据需要为数据库连接实现lazy loading。 正如您现在所看到的,不需要外部配置文件(您只需在引导程序文件中更改凭据),就不需要数据库类。