Профессиональное программирование на PHP

Страница 55 из 591


58 Глава 2 Объектно-ориентированное программирование...

Код, приведенный ниже, возвращает объект DB_Mysql Stat ement, который является оболочкой, реализованной вокруг ресурса возвращаемого значения MySQL:

class DB_MysqlStatement { protected $result; public $query; protected $dbh;

public function _construct($dbh, $query) {

$this->query = $query;

$this->dbh = $dbh;

if (!is_resource($dbh)) {

throw new Exception("Некорректное соединение ,с базой данных");

}

public function fetch row() { if(!$this->result) J

throw new Exception("Запрос не выполнен");

^ return mysql_fetch_row($this->result);

public function fetch_assoc() {

return mysql_fetch_assoc($this->result);

public function fetchall_assoc() { $retval = array();

while($row = $this->fetch_assoc()) { $retval[] = $row;

}

return $retval;

Для того чтобы затем извлечь из запроса строки, как это пришлось бы сделать, используя mysql_f etch_assoc (), можно применить следующий код:

while($row = $stmt->fetch_assoc()) { // обработка строки

}

Ниже приводится несколько замечаний по данной реализации.

 Она позволяет избежать вызова функций connect () и mysql_seleet db() вручную.

 Она обрабатывает исключительные ситуации. Исключения — новая функция в РНР 5. Здесь исключения подробно не рассматриваются — для этой темы специально выделена вторая половина главы 3, "Обработка ошибок".

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

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




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006