Использование DSN-строк для подключения к БД

May 4, 2010 by admin Комментировать »

Так как одной из задач PDO является обеспечение стандартизированных АР] для различных СУБД, то, конечно же, важным моментов при работе с PDO являет­ся способ подключения к базам данных, который может существенно отличаться у каждой системы. Так как в некоторых базах существуют пользователи, а в некото­рых ими управляет операционная система, где-то база указывается сразу при под­ключении, а где-то она должна быть выбрана дополнительно. Для решения этой проблемы был выбран зарекомендовавший себя ранее подход — DSN (Data Source Name — имя источника данных).

DSN представляет собой обыкновенную строку, в которой через определенные разделители (обычно точка с запятой) указываются все необходимые для СУБД па­раметры. В результате получается, что при подключении разработчик передает лишь одну строку, а вот строка содержит уже любой набор необходимых данных. В табл. 12.1 приведены примеры DSN для некоторых популярных СУБД.

Как можно заметить из примеров, в строках DSN хранятся параметры подклю­чения, такие как:

• тип СУБД (наименование);

• адрес хоста, к которому необходимо подключиться, и порт подключения;

• данные о пользователе и пароле;

• наименование базы данных.

Для каждой конкретной СУБД эти параметры могут быть разными, к тому же некоторые из них могут быть опущены. Например, если MySQL работает со стан­дартным портом, то при подключении номер этого порта указывать не нужно. Некоторые данные, такие как имя пользователя и пароль, могут выноситься из DSN и передаваться в конструктор класса PDO в качестве двух отдельных параметров.

Таблица 12.1. Примеры DSN для подключения к базам данных посредством PDO СУБД Примеры DSN

MySQL mysql:host=localhost;dbname=testdb;port=3307

PostgreSQL pgsql:host=localhost port=5432 dbnaine=testdb user=john password=mypass

SQLite sqlite:/path/to/database

12.5.3. Работа с PDO

Работа с PDO осуществляется способом, очень похожим на ранее рассмотренные варианты. PDO не зря расшифровывается как РНР Data Object — так как взаимо­действие с базами данных осуществляется посредством объектов. Как и в SQLite, в PDO существует несколько классов:

• PDO — это базовый класс, который обеспечивает общий доступ к БД.

• PDOStatement — это класс, предназначенный для работы с выборкой дан­ных из базы. Объект типа PDOStatement может быть получен в результате выполнения таких методов PDO, как Query () или Prepare ().

Рассмотрим некоторые из методов обоих классов.

Метод PDO::_Construct()

Метод PDO: :_Construct () — это конструктор класса PDO. При создании объек­та происходит попытка подключиться к СУБД с параметрами, указанными в DSN. Сама строка DSN передается в качестве параметра. Формат записи конструктора следующий.

PDO PDO::_construct ( string dsn [, string username [.

string password [, array driver_options]]] )

Пример создания объекта PDO и подключения к СУБД MySQL.

<?php

$dbh = new PDO(‘mysql :dbname=mytest,-host=localhost’

"user","pass");

?>

При этом создается объект типа PDO (в данном примере это объект Spdh). В каче­стве DSN была передана строка с параметрами подключения и дополнительно ука­заны имя пользователя и пароль MySQL.

Метод PDO::exec()

Метод PDO: : exec () предназначен для выполнения запроса, не возвращающего выборки данных. Формат записи метода следующий.:

long PDO::exec ( string statement )

Метод может быть полезен, например, для выполнения таких SQL-запросов, как запросы на вставку, удаление или обновление данных. На практике этот метод мо­жет быть применен следующим образом.

<?php

$dbh = new PDO(‘mysql:dbncime=mytest;host=localhost’,"user","pass"): $sql = "insert into friends (friend_name) values (‘Sandra’)"; if ($dbh->exec($sql)) {

echo "Запись вставлена I";

)

else {

echo "Что-то не получилось…":

}

?>

Если необходимо выполнить запрос SELECT и получить некоторую выборку из базы данных, то следует использовать либо метод query (), либо prepare ().

Метод PDO::query()

Этот метод выполняет запрос на выборку к базе данных. В качестве результата возвращается объект типа PDOStatement.

object PDO::query ( string statement )

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

<?php

$dbh = new PDO(‘mysql:dbname=mytest;host=localhost’, "user","pass");

$sql = ‘SELECT * from friends’; Ssth = $dbh->query ($sq]!) ; $friends = $sth->fetchAll(); print_r($ friends); ?>

В данном примере выполняется SQL-запрос, в результате которого возвращает­ся выборка всех записей из таблицы friends. Полученные данные хранятся в эк­земпляре объекта PDOStatement (здесь это $sth), и обработка результатов выбор­ки происходит посредством методов этого объекта.

Метод PDO::prepare()

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

PDOStatement PDO::prepare ( string statement [, array driver_options] )

Метод PDO: : prepare () подготавливает шаблон для SQL-запроса, который на данном этапе не выполняется, а ждет передачи параметров и выполнения. На место подставляемых параметров ставятся маркеры в виде вопросительных знаков, ко­торые при выполнении запроса будут заменены реальными параметрами. Рассмот­рим пример.

<?php

$dbh = new PDO(‘inysql:dbnaine=inytest;host=localhost’, "user", "pass") ; $sql = J SELECT * from friends where friend_name = ? or friend_name = ? ‘ ?

$sth = $dbh->prepare($sql); $names = array("Anna","Sandra"), $sth->execute($names); while ($row = $sth->fetch()) {

echo $row["friend_name"] . "<br>";

}

?>

В данном примере в заготовленный шаблон подставляются данные из массива $names и в результате с помощью метода $sth->execute () выполняется запрос.

select * from friends where friend_name = ‘Anna’ or friend_name = ‘Sandra’

Чтобы все стало еще понятнее, рассмотрим методы класса PDOStatement, кото­рые были использованы в примерах выше.

Методы класса PDOStatement

Методы данного класса в основном работают с выборкой из базы данных. Для получения данных из выборки в виде массива могут быть использованы методы fet -h () и fetchAll (). Данные методы различаются тем, что fetch () возвращает одну текущую строку из набора данных и его удобно использовать в цикле, а f etchAll () возвращает сразу всю выборку в виде одного РНР-массива.

Метод execute () используется вместе с подготовленными выражениями и предназначен для выполнения подготовленного выражения. В качестве параметра он принимает массив, элементы которого в порядке очередности будут подставлены в SQL-шаблон вместо маркеров.

Конечно же, все возможности PDO далеко не ограничиваются описанным выше функционалом, однако даже приведенные примеры показывают, что работа с база­ми данных в РНР 5 выходит на новый качественный уровень. Поэтому программи­сту теперь не нужно будет изучать функции каждого расширения для работы с той или иной СУБД, так как большинство из них стандартизированы. Однако это со­всем не означает, что программист лишается возможности эффективно использо­вать некоторые особенности конкретных СУБД, так как PDO стандартизирует только API доступа, но не создает некий универсальный функционал.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты