====== 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-а.