2008-09-26 2 views
1

Для нового проекта, который я делаю в PHP, я создал класс SQLMethods для подключения к базе данных и выполнения запросов. Сегодня вечером была первая ночь, которую я действительно испытал на ней (я написал ее неделю назад и забыл об этом), и возникла непредвиденная ошибка: когда она вызывала мою функцию ExecuteQuery(), она не использовала бы базу данных I выбранных в конструкторе.Область подключения базы данных класса PHP Проблема

Конструктор:

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()); 
    } 

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

ответ

7

вы должны объявить $ SQLConnection в своем классе, и вы должны относиться к нему как

$this->SQLConnection 

, а не просто $ SQLConnection.

2

$SQLConnection не существует в пределах ExecuteQuery способ.

Вы можете передать его непосредственно как параметр в ExecuteQuery или добавить свойство класса sqlConnection, которое установлено в конструкторе, и получило доступ как $this->sqlConnection в ваших методах класса.

1

Переменная $SQLConnectionExecuteQuery() пытается использовать созданный в пределах другой области. (Функция SQLMethods).

Соединение закрывается, когда PHP скрипт выполнит свою работу, или если вы закроете это самостоятельно (если подключение производится в рамках этого сценария)

Вы должны пропустить переменную $SQLConnection в ExecuteQuery, как указано в php.net документация

Если идентификатор ссылки не указан, подразумевается последняя ссылка, открытая mysql_connect().

Смежные вопросы