====== DBAL Driver======
DBAL Driver - базовые классы для работы с базами данных, на основе которых построена остальнаях часть пакета DBAL.
===== Статическая структура DBAL DRIVER =====
{{{:limb3_2007_2:ru:packages:dbal:limb3.0_dbal_driver.png|: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 поддерживают стандартные интерфейсы для работы с данными (см. [[limb3_2007_2:ru:packages:datasource|пакет DATASOURCE]]).
Скажем также, что реальное обращение к базе данных еще не произошло, он произойдет, когда клиенты вызовет метод rewind() или getTotalRowCount() у recordset-а.