文件包含可能的PHP范围问题?

时间:2012-03-20 23:27:32

标签: php mysql database file include

我目前正在重新编写一个旧的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;
    }

}

我的旧代码过去工作得很好,但是现在我已经将变量更改为不同的文件,我的应用程序不断输出“无法选择父母晚餐表。请联系管理员了解更多信息。” - 这意味着我的应用程序没有正确连接到数据库。

有没有人有任何想法我的代码有什么问题?起初我认为这是一个范围问题,但是我无法找到我在这里做错了什么。

提前感谢您的回复。

2 个答案:

答案 0 :(得分:2)

您不应该需要global关键字。 include包含直接在函数内定义这些变量。如果包含在函数之外,那么您将需要全局关键字。

答案 1 :(得分:1)

如果您按原样包含了设置文件,我不确定您是否需要全局关键字。

但是,通常更好的做法是尽可能避免全局变量。考虑将设置参数作为常量放入Settings类中,因此您可以通过Settings :: host等调用它们。

全局变量,因为您已经介绍了许多可能难以追踪的潜在错误,并且很可能是导致问题的原因。