我目前正在重新编写一个旧的PHP脚本,以便代码结构良好,可以用于将来的更新。
我正在尝试做的一件事是创建一个配置文件 - 这样就可以通过编辑一个文件轻松更改设置。
文件的源代码:functions.php
function ConnectToDB() {
//database configurations...
$host = "localhost";
$dbuser = "root";
$dbpass = "";
$tblname = "parents";
$connection = mysql_connect($host,$dbuser,$dbpass);
if (!$connection) {
echo 'Could not connect to the database. Please contact the administrator for more information.';
}
// select the db
$db_selected = mysql_select_db($tblname, $connection);
if (!$db_selected) {
echo 'Could not select the parents evening table. Please contact the administrator for more information.';
return false;
}else{
return true;
}
}
file:config.php
<?php
//database configurations...
$host = "localhost";
$dbuser = "root";
$dbpass = "";
$tblname = "parents";
?>
这是我的新代码: file:functions.php
function ConnectToDB() {
include('inc/config.php');
global $host; //needed becuase the scope of the variable throws an error otherwise.
global $dbuser; //needed becuase the scope of the variable throws an error otherwise.
global $dbpass; //needed becuase the scope of the variable throws an error otherwise.
global $tblname; //needed becuase the scope of the variable throws an error otherwise.
$connection = mysql_connect($host,$dbuser,$dbpass);
if (!$connection) {
echo 'Could not connect to the database. Please contact the administrator for more information.';
}
// select the db
$db_selected = mysql_select_db($tblname, $connection);
if (!$db_selected) {
echo 'Could not select the parents evening table. Please contact the administrator for more information.';
return false;
}else{
return true;
}
}
我的旧代码过去工作得很好,但是现在我已经将变量更改为不同的文件,我的应用程序不断输出“无法选择父母晚餐表。请联系管理员了解更多信息。” - 这意味着我的应用程序没有正确连接到数据库。
有没有人有任何想法我的代码有什么问题?起初我认为这是一个范围问题,但是我无法找到我在这里做错了什么。
提前感谢您的回复。
答案 0 :(得分:2)
您不应该需要global关键字。 include包含直接在函数内定义这些变量。如果包含在函数之外,那么您将需要全局关键字。
答案 1 :(得分:1)
如果您按原样包含了设置文件,我不确定您是否需要全局关键字。
但是,通常更好的做法是尽可能避免全局变量。考虑将设置参数作为常量放入Settings类中,因此您可以通过Settings :: host等调用它们。
全局变量,因为您已经介绍了许多可能难以追踪的潜在错误,并且很可能是导致问题的原因。