[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PDO
bulgakov
Может создать на замечательно сайте irbis-team.com урок по PDO? Просто я не нашел там упоминания об этом модуле php. А штука довольно полезная я считаю.



Спустя 5 минут, 24 секунды (6.07.2011 - 12:20) Winston написал(а):
Для irbis-team может любой создать урок. Если Николай посчитает его достойным то конечно же разместит на сайте.
Есть желание пиши.

Спустя 9 минут, 22 секунды (6.07.2011 - 12:30) bulgakov написал(а):
Хорошо, спасибо, попробую себя в качестве уроко-писателя)

Спустя 1 минута, 39 секунд (6.07.2011 - 12:31) Игорь_Vasinsky написал(а):
лишь бы не копипастера wink.gif

Спустя 2 минуты, 11 секунд (6.07.2011 - 12:33) bulgakov написал(а):
Нет копипаст не хочу, попробую описать все своими словами и кодом и выставить на обозрение что бы вы уже подредактировали.

Спустя 7 минут, 17 секунд (6.07.2011 - 12:41) Игорь_Vasinsky написал(а):
wink.gif так лучше

Спустя 22 минуты, 20 секунд (6.07.2011 - 13:03) tatti написал(а):
порыв души.... причём обеими руками laugh.gif

Спустя 16 минут, 23 секунды (6.07.2011 - 13:19) bulgakov написал(а):
Статья уже в разработке, набрасываю черновик.

Спустя 1 час, 14 минут, 8 секунд (6.07.2011 - 14:33) bulgakov написал(а):
Вот вкратце как-то так, прошу сильно не бить, просто тема интересная, но я в ней недостаточно опытен и эту статью каюсь я написал еще с той целью что она послужит толчком к более полноценной статье про этот инструмент и ее дополнят более знающие и опытные люди. Прошу критикуйте, комментируйте, может что-то нужно добавить, давайте вместе ее сделаем, надеюсь это будет еще один хороший урок на irbis-team.com
Свернутый текст

PDO

Введение

Давайте рассмотрим такую ситуацию, вы пишите какой-либо свой проект на php, будь то фреймворк, заказ для клиента или просто сайт для души. А в качестве базы данных например вы используете какую-то одну выбранную базу, например MySQL. Вот вы создали файл подключения к базе, прописали все методы для работы с выбранной вами базой данных и тут по какой-то причине вам необходимо сменить базу данных, а то и вообще необходима поддержка нескольких баз разных производителей. Вы сломя голову бросаетесь переписывать все методы mysql_query() и тому подобные на соответствующие другой базе данных или же в случае обеспечения нескольких баз данных кидаетесь писать свой собственный универсальный класс для поддержки нескольких баз. Так вот не спешите это делать, потому как за нас уже придумали такой замечательный инструментарий как PDO - PHP Data Objects. Что он делает? Говоря простым языком, он обеспечивает единый интерфейс для доступа ко всем поддерживаемым PHP базам данных. То есть используя PDO вам для обеспечения поддержки нескольких баз данных необходимо будет лишь написать для каждой базы свой файл подключения к ней с прописанными стандартными параметрами выбора хоста, имени юзера, пароля и имя базы данных. А дальше уже в основном коде проекта подключив нужный вам файл доступа к базе вы используете для работы с ней одни и теже методы независимо от типа базы, будь то MySQL, MSSQL, SQLite, Oracle и так далее. То есть например функция запроса к базе данных будет для всех баз выглядеть одинаково и вам не придется переписывать весь синтаксис. Теперь давайте подробнее разберем общие моменты работы с PDO.

Соединение с базой данных

Итак, начнем с подключения к базе данных. Давайте для начала рассмотрим пример работы с MySQL, как увидим далее при работе с другими базами различия будут минимальные. Для работы мы будем использовать одноименный класс — PDO.
Создадим файл доступа к базе данных pdo_db.inc.php:

$type_db = 'mysql'; // имя используемой базы данных будем передавать в конструктор PDO
$host = 'localhost';
$dbname = 'dbname';
$user = 'user_name';
$password = 'user_pass';

Теперь создаем основной файл в котором мы будем работать с базой pdo.php и подключимся к нашей базе:

require_once 'pdo_db.inc.php';
$connect = new PDO("$type_db:host=$host; dbname=$dbname", $user, $password); // создаем объект класса PDO в конструктор передаем параметры подключения к базе

Теперь мы имеем экземпляр класса PDO с именем $connect, который имеет методы работы с базой данных. Как мы видим в конструктор класса PDO мы передали три параметра, первый параметр это строка DSN(Data Source Name) в ней мы указываем тип базы данных, хост и имя базы данных для работы. Строка DSN для каждой из баз может отличаться. MySQL DSN может содержать следующие параметры:
host — имя хоста
port — номер порта для подключения
dbname — имя базы данных
unix_socket — Юникс сокет должен использоваться вместе с параметрами host или port
charset — кодировка

А вот в качестве примера для сравнения какие параметры может содержать DSN базы данных MSSQL:
host — имя хоста
dbname — имя базы данных
charset — кодировка
appname — имя приложения
В принципе в большинстве случаев нам хватит параметров host, dbname и charset по необходимости.
Ну и последние два параметра конструктора это имя пользователя и пароль для доступа к базе.
Теперь давайте посмотрим что мы можем сделать с нашим объектом и какие методы можем использовать.

Выполнение запросов

Как же выполнять самое нужное нам, а именно SQL запросы? Рассмотрим два метода PDO::exec() и PDO::query.
PDO::exec() принимает строку SQL запроса, а возвращает целое число, которое обозначает количество строк измененных или удаленных в результате SQL запроса например при помощи INSERT или UPDATE если ни одна строка не изменилась то вернется 0. Эта функция не возвращает результата работы вызова SQL оператора SELECT для этого как раз подходит функция PDO::query.
PDO::query принимает строку SQL запроса, а вот возвращает она объект класса PDOStatement который предоставляет методы для обработки полученного запроса.
Дабы слишком не запутать вас давайте посмотрим примеры запросов:

require_once 'pdo_db.inc.php';
$connect = new PDO("$type_db:host=$host; dbname=$dbname", $user, $password); // создаем объект класса PDO в конструктор передаем параметры подключения к базе
$sql_insert = "INSERT INTO table_name(col1, col2) VALUES('val1', 'val2')";
$sql_select = "SELECT col1, col2 FROM table_name";
$num_rows = $connect->exec($sql_insert); // Выполняем INSERT запрос, возвращается int
echo 'В результате SQL запроса изменилось строк -'.$num_rows;
foreach ($connect->query($sql_select) as $row) { // Пример работы с query() и итератором объекта.
echo $row['col1'].'<br/>';
echo $row['col2'].'<br/>';
}

То есть для выполнения того-же SELECT вам нужно использовать $connect->query(SELECT …') независимо от типа базы данных. Несмотря на кажущуюся сперва запутанность работы с PDO этот механизм обеспечит вашему приложению универсальность в работе с базами данных.

Спустя 22 минуты, 32 секунды (6.07.2011 - 14:56) alex12060 написал(а):
Статья не закончена, но если это начало, то вполне достойно. Правда, пунктуация храмает, слишком уверенные слова:

Цитата
Итак мы убедились в нужности и удобности PDO


Уж слишком крутое заявление smile.gif

Ах да, после итак нужна запятая.

И еще, рекомендую выделять абзацы, чем их больше, тем легче читать.

Ну, вроде пока все.

Спустя 4 минуты, 27 секунд (6.07.2011 - 15:00) bulgakov написал(а):
Статья была написана впопыхах потому как я уже сказал хочеться нормальную статью по PDO поэтому эта статья так сказать опен сорс) Требует дополнений)

Спустя 2 минуты, 25 секунд (6.07.2011 - 15:03) bulgakov написал(а):
Это так сказать клич) Что бы собраться и сделать нормальную читабельную статейку по данному инструменту, а то просто высказывание типа - давайте напишем статью не действует) Вот и накидал)

Спустя 6 минут, 18 секунд (6.07.2011 - 15:09) killer8080 написал(а):
опечаточка :)
equire_once 'pdo_db.inc.php';

Спустя 2 минуты, 18 секунд (6.07.2011 - 15:11) bulgakov написал(а):
killer8080
Поправил, спасибо.

Спустя 49 секунд (6.07.2011 - 15:12) bulgakov написал(а):
alex12060
Цитата
Итак мы убедились в нужности и удобности PDO

Убрал.

Спустя 5 минут, 6 секунд (6.07.2011 - 15:17) twin написал(а):
Я на прктике для себя пока не увидел ни "нужности", ни, тем более "удобности" PDO. Потому не писал таких статей и не планировал.

Если есть такое желание и возможности - это только радует. Однако это не статья, это скорее вступление. Потому что PDO - достаточно сложная и серьёзная тема. Продолжай, начало хорошее. smile.gif

Спустя 2 минуты, 4 секунды (6.07.2011 - 15:19) bulgakov написал(а):
Хорошо, буду стараться потихоньку дописывать статью, может кому-то пригодится...

Спустя 2 часа, 6 минут, 57 секунд (6.07.2011 - 17:26) Invis1ble написал(а):
bulgakov
Имхо, было бы неплохо реализовать обработку возможных исключений, хотя бы на стадии создания объекта.
И еще, совет на будущее - не делай строки кода длиннее 80 симолов.
Пока все smile.gif

Спустя 1 минута, 26 секунд (6.07.2011 - 17:28) bulgakov написал(а):
Invis1ble
Хорошо, спасибо, приму к сведению.

Спустя 27 дней, 1 час, 29 минут, 47 секунд (3.08.2011 - 18:58) haZe написал(а):
Все, проект загнулся? sad.gif

Спустя 36 минут, 44 секунды (3.08.2011 - 19:34) bulgakov написал(а):
Да пока некогда не доберусь( Тем более сейчас решил подтянуть свои знания в верстке и javascript. Я надеялся еще на постороннюю помощь) Сейчас в отпуск иду может быть еще допишу.

Спустя 8 дней, 4 часа, 32 минуты, 27 секунд (12.08.2011 - 00:07) haZe написал(а):
Эх, а я надеялся углубится в PDO. Печааль...

Спустя 7 часов, 20 минут, 34 секунды (12.08.2011 - 07:27) Michael написал(а):
haZe, по хелпу почему не почитаешь? Статей в инете полно. Вещь не сильно большая для изучения и не сильно сложная. Весьма стоящая, но супер чего то в ней нет. Единый синтаксис php кода+подготовленные выражения+встроенная защита от sql иньекций

Спустя 23 дня, 8 часов, 7 минут, 39 секунд (5.09.2011 - 15:35) haZe написал(а):
Michael, читаю и использую. Просто часть его функций мне не ясна, надеялся найти комплексный русский мануал с "разжовыванием".
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.