Содержание

DBAL Driver

DBAL Driver - базовые классы для работы с базами данных, на основе которых построена остальнаях часть пакета DBAL.

Статическая структура DBAL DRIVER

:limb3_2007_2:ru:packages:dbal:limb3.0_dbal_driver.png}

Пример использования DBAL Driver

Приведем небольшой пример и дадим к нему подробные комментарии. Пример довольно абстрактный, однако позволяет продемонстрировать как используются отдельные компоненты DBAL.

  [...]
  $dbc = new DBC();
  $conn = $dbc->getCurrentConnection();
 
  $sql_string = 'SELECT team.id, team.title '.
         ' coach.id as coach_id, coach.name as coach_name, coach.last_name as coach_last_name '.
         ' FROM coach, team '.
         ' WHERE coach.team_id = team.id AND team.id = %team_id%';
 
  $stmt = $conn->newStatement($sql_string);
  $stmt->setInteger('team_id', $team_id);
 
  return $stmt->getRecordSet();

Итак, комментарии:

  $config = new DBC();

Здесь мы создали объект, которых хранит является фасадом для подключения к базе данных.

  $conn = $dbc->getCurrentConnection();

Затем мы получили объект соединения к базе данных. Допустим, это объект класса MySQLConnection.

  $sql_string = 'SELECT team.id, team.title '.
                ' coach.id as coach_id, coach.name as coach_name, coach.last_name as coach_last_name '.
                ' FROM coach, team '.
                ' WHERE coach.team_id = team.id AND team.id = :team_id:';
 
  $stmt = $conn->newStatement($sql_string);

Затем создали объект stmt - statement. Объект $conn самостоятельно решит какого типа statement нужно создать. Так как в запросе находится ключевое слово SELECT, то создался объект класса MySQLSelectStatement.

  $stmt->setInteger('team_id', $team_id);

Здесь мы установили значение параметра team_id запроса определенному значению. Данные конструкции используются для того, чтобы правильно экранировать параметры, то есть именно средствами драйвера базы данных.

  return $stmt->getRecordSet();

И наконец, мы вернули клиентам так называемый recordset, набор записей. На самом деле это объект класса MySQLRecordSet, который реализует интерфейс итератора. Клиенты могут работать с MySQLRecordSet как с обычным итератором, не зная, что данные взялись именно из базы данных. В этом и есть преимущество реализации драйвера, то что классы, входящие в DBAL поддерживают стандартные интерфейсы для работы с данными (см. пакет DATASOURCE).

Скажем также, что реальное обращение к базе данных еще не произошло, он произойдет, когда клиенты вызовет метод rewind() или getTotalRowCount() у recordset-а.