Используйте Require once() для правильного включения переменных подключения к базе данных


Я новичок в php (но долгое время разработчик на других языках), и я пробую некоторые примеры подключений к бд в "PHP, MySQL и JavaScript". Он показывает пример файла для включения переменных подключения к БД (имя сервера, имя пользователя, пароль, база данных и т.д.). У меня есть php-файл, в котором есть несколько функций, которые я написал, и в одной из них есть несколько SQL-запросов. По какой-либо причине вызов require_once в этом файле не выводит никаких ошибок (у меня есть конфигурация E_ALL), но эти переменные в моей базе данных php-файл имеет значение null.

Я вызвал echo со всеми переменными в этой функции, чтобы посмотреть, что, черт возьми, происходит, и, конечно, он выводит пустую строку. Что в мире выходит за рамки? Должно быть, я упускаю что-то простое.

Вот пример того, что я делаю

Db_login.php

<?php
    $db_server = 'localhost';
    // ....
?>

Functions.php

<?php
    require_once('db_login.php');

    function myfunction() {
        echo "$db_server";
        // ...
    }
?>

Называйте меня сумасшедшим, но разве это не должно быть достаточно простым, чтобы работать?

Author: trgraglia, 2010-09-01

3 answers

Переменные, которые вы объявляете в db_login.php, являются глобальными. Чтобы получить к ним доступ в вашей функции, вам нужно использовать переменную $GLOBALS, например $GLOBALS['db_server'], или объявить их глобальными внутри вашей функции, используя ключевое слово global, например global $db_server.

 6
Author: wuputah, 2010-09-01 04:21:39

PHP не имеет область действия функции как и Javascript, поэтому у вас нет доступа к переменным в db_login.php внутри функций functions.php.

Существует несколько способов справиться с этим. В связи с вероятным использованием вами имени сервера global константы вероятно, это было бы хорошим решением, поскольку ничто не может их изменить.

В вашем случае вы можете сделать:

<?php
    require_once('db_login.php');
      // You have access to $db_server here.
      // Create a constant.
    define("DB_SERVER", $db_server);

    function myfunction() {
          // Using a constant. Note that there is no "$".
        echo DB_SERVER ;
          // Constants are interpreted inside double quotes too
        echo "\nMy constant is DB_SERVER";
        // ...
    }
?>

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

myfunction($variable);

  // by value
function myfunction($pass_variable_to_me_by_value)
{
    echo $pass_variable_to_me_by_value;
    // ...
}

function myfunction(& $pass_variable_to_me_by_reference)
{
    echo $pass_variable_to_me_by_reference;
    // ...
}

В качестве примечания, в вашем случае , используя ключевое слово global или $ ГЛОБАЛЬНЫЕ массив внутри функции - это по сути, то же самое, что и передача по ссылке., но если вы не переходите из глобальной области, они могут сильно отличаться (в классе или из другой функции для пример).

 7
Author: Peter Ajtai, 2010-09-01 05:06:06

Внутри функции "myfunction" у вас нет доступа к этим переменным...

Подробнее см. в: http://php.net/manual/en/language.variables.scope.php

 5
Author: Felipe Cardoso Martins, 2010-09-01 04:20:28