Используйте 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";
// ...
}
?>
Называйте меня сумасшедшим, но разве это не должно быть достаточно простым, чтобы работать?
3 answers
Переменные, которые вы объявляете в db_login.php
, являются глобальными. Чтобы получить к ним доступ в вашей функции, вам нужно использовать переменную $GLOBALS
, например $GLOBALS['db_server']
, или объявить их глобальными внутри вашей функции, используя ключевое слово global
, например global $db_server
.
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
или $ ГЛОБАЛЬНЫЕ массив внутри функции - это по сути, то же самое, что и передача по ссылке., но если вы не переходите из глобальной области, они могут сильно отличаться (в классе или из другой функции для пример).
Внутри функции "myfunction" у вас нет доступа к этим переменным...
Подробнее см. в: http://php.net/manual/en/language.variables.scope.php