我有一个快速提问你们,我已经创建了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,现在选择数据库时,它表明我缺少数据库名称。不确定放在哪里以及如何改变它。谢谢。
编辑:我正在为“选择”“插入”和“删除”创建功能。如果你们中的任何一个人能指出我做一个很好的信息来源,这将有助于我的研究,我将非常感激。
答案 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。 正如您现在所看到的,不需要外部配置文件(您只需在引导程序文件中更改凭据),就不需要数据库类。