Я нахожусь в режиме обучения, очень плохо знаком с PHP, поэтому я работаю с примером кода.
Пожалуйста, прости меня за использование 'global' здесь, но я хочу понять область видимости переменной php.
Вот myGlobals.php:
<?php
global $db_server;
// other code not shown
?>
Вот connectToDb.php:
<?php
require_once 'myGlobals.php';
// no declared functions in this file, all inline code
$db_server = mysql_connect(.....);
mysql_select_db( "theDatabase", $db_server);
?>
Вот addDbRecords.php:
<?php
require_once 'myGlobals.php';
// other inline code.....
doAddDeleteRecord($db_server);
function doAddDeleteRecord($db_server)
{
//global $db_server;
if( !mysql_query($query, $db_server))
{
// handle the error...
}
}
?>
Вот index.php:
<?php
require_once 'myGlobals.php';
require_once 'connectToDb.php';
require_once 'addDbRecords.php';
// this is simplified, just trying to show that everything in inline code
?>
Вот проблема. Когда я вызываю doAddDeleteRecord($db_server)
внутри файла addDbRecords.php
выше, $db_server
недействительно - это ноль - когда я звоню mysql_query(.., $db_server, ...)
- это сообщение об ошибке:
"Предупреждение: mysql_query () ожидает
параметр 2 будет ресурсом, задан ноль
в C: \ xampp \ htdocs \ addDbRecords.php на
линия 29 "
Поэтому я попытался использовать глобальное объявление внутри doAddDeleteRecord()
(закомментировано выше) - без изменений.
mysql_query(...)
все еще терпит неудачу со значением NULL для $db_server
.
Я знаю, что mysql_connect(....)
работает, потому что другой код удаляет все мои записи из моей базы данных успешно (с помощью SELECT) и существующие записи корректно отображаются в браузере.
Так что, на мой взгляд, тот факт, что $db_server
объявлен с использованием 'global', должен означать, что область действия $db_server
такова, что когда-то вызывается mysql_connect(...)
- при объеме файла во всех моих файлах, $db_server
будет действительным подключением к моей базе данных.
Я только пытаюсь узнать о php scoping , а не о OOAD или о чем-либо еще (пока). Почему $db_server()
здесь ноль?