Проблема с областью подключения к базе данных классов PHP
-
02-07-2019 - |
Вопрос
Для нового проекта, который я делаю на PHP, я создал класс SQLMethods для подключения к базе данных и выполнения запросов.Сегодня вечером я впервые смог его протестировать (я написал это примерно неделю назад и забыл об этом), и произошла непредвиденная ошибка:Когда он вызывал мою функцию ExecuteQuery(), он не использовал базу данных, которую я выбрал в конструкторе.
Конструктор:
public function SQLMethods() {
$SQLConnection = mysql_connect($SQLDBAddress, $SQLUserName, $SQLPassword);
if (!$SQLConnection) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db($SQLDB, $SQLConnection);
}
Рассматриваемая функция:
public function ExecuteQuery($Query) {
mysql_query($Query, $SQLConnection) or die('Could not perform query: ' . mysql_error());
}
Кто-нибудь понимает, в чем может быть проблема?Закрывается ли соединение после завершения конструктора?
Решение
вы должны объявить $SQLConnection в своем классе и ссылаться на него как
$this->SQLConnection
а не просто $SQLConnection.
Другие советы
$SQLConnection
не существует внутри ExecuteQuery
метод.
Вы можете передать его непосредственно в качестве параметра ExecuteQuery
, или добавьте sqlConnection
свойство класса, которое устанавливается в конструкторе и доступно как $this->sqlConnection
внутри методов вашего класса.
Переменная $SQLConnection
ExecuteQuery()
который пытается использовать, создан в другой области.( SQLMethods
функция).
Соединение закрывается, когда PHP-скрипт выполнил свою работу или если вы закрываете его самостоятельно (если соединение установлено внутри этого сценария)
Вам следует пропустить $SQLConnection
переменная внутри ExecuteQuery
как указано в документации php.net
Если идентификатор ссылки не указан, будет использована последняя ссылка, открытая пользователем.
mysql_connect()
предполагается.