Intereting Posts
Форма представляет с двумя разными ошибками в зависимости от входного значения – 1 не работает Избавьтесь от Index.php в URL-адресах CodeIgniter PDO возвращает результаты в массив Очистка PHP Symfony2 и Twig – проверьте, существует ли актив Ошибка Mysql datetime DEFAULT CURRENT_TIMESTAMP Laravel 5.3 – Как сохранить сообщение сеанса до тех пор, пока пользователи не выйдут из системы Матрица поиска для всех прямоугольников заданных размеров (выберите блоки сидений) Как использовать пользовательские шаблоны в gii (используя Yii 2) Карта родословной / древовидной структуры из базы данных Программист пытается выяснить собственный проект с использованием PHP Какое действие я могу использовать в WordPress, который запускается всякий раз, когда пользовательская почта сохраняется или обновляется? Является ли плохая практика для модели называть себя внутри себя? seeInField находит элемент, а fillField – не CodeCeption Как подключить несколько баз данных в инфраструктуре phalcon в то же время использовать как в классе модели не только один

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

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

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

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

db_login.php

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

functions.php

 <?php require_once('db_login.php'); function myfunction() { echo "$db_server"; // ... } ?> 

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

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

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

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

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

 <?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 ключевого слова или массива $ GLOBALS внутри функции по существу совпадает с передачей по ссылке. , но если вы не переходите из глобальной области, они могут быть очень разными (например, в классе или другой функции).

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

См. Больше в: http://php.net/manual/en/language.variables.scope.php