Подключение к базе данных в конструктор и деструктор


Я играю с разными способами взаимодействия с базой данных на PHP, и одна из идей, я играл с подключение к БД в конструкторе и отключением в деструкторе. Это код из моей базе данных класса.

function __construct()
{
  $this->link = mysql_connect($this->server.':'.$this->port, $this->username);
  if(!$this->link)
    die('Could not connect: '.mysql_error());

  if(!mysql_select_db($this->database, $this->link))
    die('Could not select database: '.mysql_error());
}    

function __destruct()
{
  if(mysql_close($this->link))
    $this->link = null; 
}

Это хорошо работает, моя единственная оговорка, что если мне нужно подключить несколько до базы данных несколько раз, он будет делать многократные подключения и отключения. Если я сделаю это, я могу видеть, может быть, потенциальные проблемы. Является ли это проблемой или есть лучший способ сделать это? И это мой код даже проведешь в целом?



9583
38
задан 19 января 2011 в 09:01 Источник Поделиться
Комментарии
5 ответов

Из вашего вопроса я делаю вывод, что вы хотите иметь несколько экземпляров класса ДБ. Если так я предлагаю реферирование подключение к другому классу и содержит ссылку на то же подключение, в каждый из инстансов.

Тогда вы сможете установить соединение, как синглтон и, таким образом, только подключение и сразу отключение.

Извинения заранее, если я пропустил что-нибудь здесь - мой PHP-это далеко не свободно.

18
ответ дан 19 января 2011 в 09:01 Источник Поделиться

Можно использовать в mysqli (расширение php), который является классовой по умолчанию вместо MySQL. Это
очень легко настроить несколько подключений. Однако вы обязаны знать, что соединение выполняется запрос всегда.


Поздравляю с первым вопросом.

19
ответ дан 19 января 2011 в 09:01 Источник Поделиться

Вы также можете посмотреть на встроенном команду php постоянные соединения(). Это отличается от образом в том, что он открывает постоянное подключение к БД в первый раз она называется, и каждый последующий раз, он проверяет, чтобы увидеть, если существующее подключение к базе данных не существует, и вместо этого использует эту связь. Затем вы должны удалить команду mysql_close от деструктора, как они сохраняются между загрузками страниц.

Руководство по PHP страницы: http://php.net/manual/en/function.mysql-pconnect.php

16
ответ дан 19 января 2011 в 09:01 Источник Поделиться

использовать библиотеку абстракции базы данных mdb2 как груша для подключения к базе данных.

Эти тезисы все логические связи от вашего кода, чтобы когда-нибудь изменить вашу базу данных (MySQL в SQLite и т. д.) Вам не придется менять свой код.

http://pear.php.net/manual/en/package.database.mdb2.php

13
ответ дан 19 января 2011 в 09:01 Источник Поделиться

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

используя умрет вызывает сценарий, чтобы остановить и отправить 1 маленькое сообщение для пользователя, кто подумает, что это мусор, и никогда больше не посещать ваш сайт :( :(

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

Вы также можете иметь поле с надписью Введите ваш адрес электронной почты и мы вышлем вам, когда вернулись на линию, вы получите эту идею.

что касается кода, я хотел бы пойти вниз по линии:

class Database
{
public function __construct($autoconnect = false)
{
//Here you would 'globalize' your config and set it locally as a reference.
if($autoconnect === true)
{
$this->connect();
}
}

public function connect()
{
if($this->connected() === false)
{
$result = $this->driver->sendCommand("connect");
if($result === true)
{
$this->setConnectionState("active");
$this->setConnectionResource($this->driver->sendCommand("get_resource"));
}else
{
throw new DatabaseConnectionError($this->driver->sendCommand("getDriverError"));
}
}
}
}

Это дает вам больше возможностей в долгосрочной перспективе, а всякое действие разрешимых в рамках вашего приложения, ничего автоматически уволена по умолчанию.

вы можете просто использовать try,catch блоки для поддержания ваших отчетов об ошибках.

10
ответ дан 19 января 2011 в 11:01 Источник Поделиться