Возможная проблема с областью PHP в файле include? - PullRequest
1 голос
/ 21 марта 2012

В настоящее время я переписываю один из моих старых сценариев 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;
    }

}

файл: config.php

<?php

//database configurations...
$host = "localhost";
$dbuser = "root";
$dbpass = "";
$tblname = "parents";

?>

Это мой новый код: файл: 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 ]

2 голосов
/ 21 марта 2012

Вам не нужно глобальное ключевое слово.Включение определяет эти переменные непосредственно внутри функции.Если включение было за пределами функции, вам понадобятся глобальные ключевые слова.

1 голос
/ 21 марта 2012

Я не уверен, что вам нужно глобальное ключевое слово, если вы включили файл настроек как есть.

Однако обычно лучше избегать глобальных переменных в максимально возможной степени.Подумайте о том, чтобы поместить параметры настроек в класс Settings в качестве констант, чтобы вы вызывали их через Settings :: host и т. Д.

Глобальные переменные, поскольку вы представили много потенциальных ошибок, которые трудно отследить,и вполне может быть причиной вашей проблемы.

...