RSS-фид

Знакомство с PDO

Привет, всем! Сразу дико извиняюсь за долгое отсутствие. Причиной тому был приказ моего модема долго жить. Бабла на покупку нового пока нет, так что приходится сидеть из под глючного роутера. Ну да ладно, хватит лирики, приступим, собственно к сабжу.

Самая распространенная на данный момент СУБД это MySQL и соответственно все юзают именно ее. Да не спорю, мускул хорош и я сам его юзаю. Но существует еще и расширение MySQLi, которое рекомендуют сами разработчики PHP (или не рекомендуют?), но пока оно не столь популярно. Чем же так хорош MySQLi, по сравнению со старым добрым "майсиквелом". Ну во-первых он быстрее, во-вторых безопаснее, но главное преимущество - это наличие так называемых плейсхолдеров или иначе подготовленных выражений, что защищает от SQL-иньекций и увеличивает производительность.

Казалось бы MySQLi идеальная БД. Но в PHP 5 существует еще одно расширение - PDO (PHP Data Objects). Что же это за такое расширение? PDO предоставляет общий интерфейс к различным базам данных (SQLite, MySQL, PosgreSQL, etc), т.е. служит неким адаптером. К преимуществом PDO можно отнести, то, что оно написано на C, (впрочем, почти как и все расширения) с учетом всех нововведений PHP 5.1. Вообщем PDO - рулез :). Ну и чтобы нам реальным пацанам не было стремно перед другими такими же пацанами, мы должны юзать или хотя бы знать как юзать PDO. Что же будем учиться :).

Для начала нам надо убедится, что у нас имеется библиотека PDO. Для этого смотрим вывод функции phpinfo(). У меня на Денвере (да, я юзаю Денвер) установлен драйвер php_pdo_mysql.dll. В принципе мне этого достаточно. Вам должно быть тоже, если только вы не захотите использовать, к примеру SQLite или PostgreSQL. В таком случае придется самостоятельно скачать дополнительные драйвера. Итак, будем считать, что все готово и приступим к самому интересному - кодингу.

Подключение к MySQL:


$connect = new PDO('mysql:host=хост;dbname=название БД', 'логин', 'пароль');

Закрытие соединения:


$connect = null;

Запросы. Запросы в PDO могут быть двух видов: обычные и с плейсхолдерами. Запросы с плейсхолдерами рекомендуются для скорости и безопасности.

Рассмотрим обычные запросы. Они могут выполняться двумя способами: через метод query() и метод exec(). Обычно рекомендуется для получения данных из БД использовать метод query(), а для модификации данных - метод exec().

Например:


$res = $connect->query("SELECT * FROM posts");

Как не трудно догадаться этот запрос получает все данные из таблицы posts. Поэтому использовался метод query().


$res = $connect->exec("INSERT INTO posts VALUES (0, '$title', '$blog_post')");
$res = $connect->exec("UPDATE posts SET title = '$title', blog_post = '$blog_post'");

А эти запросы модифицируют информацию (вставка и обновление), поэтому здесь использовался метод exec().

Ну а теперь самое вкусное - подготовленные выражения, они же плейсхолдеры. И сразу пример:


$id = $_GET['id'];
$res = $connect->prepare("UPDATE posts set title = '$title', blog_post = '$blog_post' WHERE id = ?");
$res = $connect->execute(array($id));

Здесь в массив подставляется значение переменной $id, в которой хранится значение из GET-переменной. Оно подставляется на место знака вопроса в первом запросе. Вот таким ввот образом происходит защита от SQL-иньекций.

Для экранирования символов, используется функция quote().

Теперь быстренько пройдемся по выборке данных:


$res = $connect->query("SELECT * FROM posts");
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
    // Переменной $row присвоится ассоциативный массив
}
while ($obj = $res->fetch(PDO::FETCH_OBJ)) {
    // переменной $obj присвоится объект
}

На этом все. Это была лишь малая толика обзора возможностей PDO. Да и я не ставил перед собой цели, рассмотреть всех их, тем более я сам всего не знаю :). Я хотел лишь подтолкнуть вас на изучение такого замечательного расширения, как PDO. Дальше Гугл, Яндекс, Википедия и т.п. вам в помощь. Свои вопросы можете постить в комменты, чем смогу, помогу. До свидос :).

ЗЫ: кстати, чуть не забыл, велкам всем желающим махнуться постовыми. Предпочтения будут отдаваться блогам, хотя бы близким IT-шной тематике. На пузомерки не смотрю, так что торопитесь :).

Запостено: 30 августа 2010 г. в 10:24 | 28 комментов

Комменты:

#3 Андрей

Андрей

Парни, а почему вы не выбираете с#? Ведь, там такоие обёртки можно самому делать! Адаптеры, провайдеры ... Вы пользуетесь тем, что вам дали, а самому ведь удобнее написать dll`ку а в ней буден находиться обёртка для всего, что вам потребуется. Хотя, я понимаю, что на Php тоже можно написать обёртки (wrappers) для работы с базой и т.п.. Меня просто интересует вопрос: "Почему вы не выбираете asp.net?" По религиозным соображениям? Спасибо.

Добавлено: 31 августа 2010 г. в 12:26

Ответить

#5 Андрей

Андрей

@Никита Красноярцев, Никита, может для тебя это окажется новостью, но за c# платить не нужно. Есть бесплатные Visual Web Developer (IDE) и Sql Server express. Всё. Единственный минус в .NET я вижу в дорогом хостинге, хотя ... Вот если, я делаю сателиты для продвижения клиентских проектов - то они у меня на PHP, так как их много и на разных IP и будет дешевле хостинг. А если, делается сайт клиенту, то asp.net - просто для меня это быстрее.

Добавлено: 31 августа 2010 г. в 17:42

Ответить

#6 Канат Гайлимов

Канат Гайлимов

@Андрей, быдлокодеры кодят на ПХП :D Если серьезно, то год назад я выбрал PHP за легкость, популярность, Web-ориентированность. Сейчас я бы наверное выбрал Ruby или Python... Насчет C# и .NET в целом, то они у меня в планах Спасибо за IDE, а то юзать крякнутую Visual Studio не очень бы хотелось ЗЫ: чет отключение "магических" кавычек в .htaccess не пашет...

Добавлено: 31 августа 2010 г. в 19:03

Ответить

#7 Никита Красноярцев

Никита Красноярцев

@Андрей, Про IDE не знал, интересно, что за фрукт такой... Я сам пробовал кодить на C#, но только десктопные приложения и мне, кстати, очень понравился язык... Но вот я пересел с винды на линукс и с .net'ом попрощался попытавшись освоить java. Кстати, встречный вопрос: Почему не java? На нем ведь тоже web-приложения писать можно... В общем как-то и с джавой не сложилось и я углубился в web: php, html, css, js...

Добавлено: 01 сентября 2010 г. в 00:12

Ответить

#9 Adil

Adil

Ребят, не парьтесь Учите Python/Django По скорости разработки он практически лидер среди всех фреймворков.

Добавлено: 05 сентября 2010 г. в 13:13

Ответить

#10 Островитянин

Островитянин

@Андрей, по одной простой причине когда я начинал использовать PHP, asp.net ещё не было. А сейчас мешает понятие обратной совместимости. Да и по времени чем больше кожу убеждаюсь что качество программного продукта от языка программирования зависит в последнею очередь, а в первую от прямых рук того кто этот язык использует.

Добавлено: 07 сентября 2010 г. в 16:13

Ответить

#11 Канат Гайлимов

Канат Гайлимов

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

Золотые слова

Добавлено: 09 сентября 2010 г. в 18:14

Ответить

#12 CrashX

CrashX

.NET это не кросс пратформер, а ПЫХ, жив и будет жить, искал про PDO, и тут ничего не нашел чем он лучше то? я юзаю свой драйвер... проблема в безопасноти есть, не 1 дравер пока не устраивает в этом плане ... даже свой, иначе бы не искал

Добавлено: 29 сентября 2010 г. в 11:23

Ответить

#13 Павел

Павел

Начну с PDO. Выбрал для себя именно PHP Data Object, потому что лень писать свой класс для работы с БД - это во-первое. Во-вторых, PDO еще и как защищает от SQL-инъекций с помощью prepare. И на конец, работает-то он быстрее... да и вообще, зачем выдумыват велосипед? PDO.dll стоит, наверное, у каждого хостера! Теперь что касается C#, ASP.NET vs. PHP Учил когда-то в универе этот C# (вместе с MsSQL) и, скорее всего, выбрал бы его для разработки Windows Applications и не более. Пробовал писать некоторые веб-проекты на ASP.NET - заплакал и вернулся к родному PHP (уж очень "крутой" этот ASP.NET). В PHP+HTML+CSS как-то все проще, "прозрачнее" ... . За бугром, к стати, на ASP.NET и PHP пишуть 50 на 50 примерно. И заметил, что большая часть сайтов, которые разрабатывались на ASP.NET - это простенькие сайты.

Добавлено: 17 октября 2010 г. в 17:55

Ответить

#14 Канат Гайлимов

Канат Гайлимов

За бугром, к стати, на ASP.NET и PHP пишуть 50 на 50 примерно. И заметил, что большая часть сайтов, которые разрабатывались на ASP.NET - это простенькие сайты.

На ASP.NET видел разные сайты, но он имхо больше подходит для крупных проектов

Добавлено: 30 октября 2010 г. в 08:06

Ответить

#15 Павел

Павел

php - это, в первую очередь, веб-язык. Поэтому сравнивать его с ASP, С, Java все-равно, что курицу с яйцом.
Лично для себя выбрал веб-направление и язык PHP, который удовлетвояет все мои запросы. Поэтому не надо хаить те или иные языки- у каждого есть минусы и плюсы: хоть у пхп, с, ява и т.д.
Чем плох пхп? ведь это есть и сам себе шаблонизатор, есть и ООП, с последних версий пространство имен и многое другое. Этого вполне достаточно, чтобы создавать круптные и высоконагруженные проекты.
Если не нравится код - то это быдлокодер, а не язык.

Добавлено: 20 декабря 2010 г. в 12:54

Ответить

#16 Барабаш

Барабаш

@Андрей,
PHP программисты пользуются тем что им дали ??? Это шутка ??)))
PHP программисты лепят то что им нужно - свои DataGrid-ы, календари на JavaScript, всякое..., используя разные технологии - HTML/PHP/JavaScript(AJAX) и еще много чего. А вот какраз ASP.NET программисты пользуются тем что им предлагает панель инструментов в Visual Studio. Так что могу предложить обратное, перейти с ASP.NET на PHP и делать все своими ручками.

Добавлено: 16 февраля 2011 г. в 13:42

Ответить

#17 Павел Третьяков

Павел Третьяков

Пиздатая статья =) будем юзать PDO, надеюсь не придется над ним . Пасибо

Добавлено: 30 марта 2011 г. в 16:08

Ответить

#18 xattab4

xattab4

И никто не заметил:
<?php $res = $connect->execute(array($id); ?>
надо ведь:
<?php $res = $connect->execute(array($id)); ?>

Добавлено: 24 апреля 2011 г. в 19:26

Ответить

#20 Дмитрий

Дмитрий

@Андрей, У ASP.NET есть один минус определяющий все и вся - привязка к платформе Windows. А как вы сами понимаете, в 99% случаев, отсутствие кроссплатформенности это ГРОМАДНЫЙ удар по решению, которое вы намерены продавать.

Добавлено: 27 апреля 2011 г. в 21:53

Ответить

#21 Михаил

Михаил

Вот таким ввот образом происходит защита от SQL-иньекций.


и каким тут образом защищено от SQL запроса? Нигде ведь тип не указывается...

Добавлено: 01 августа 2011 г. в 13:35

Ответить

#22 Антон

Антон

@Андрей, Банально: для работы ASP нужен win хостинг. *nix хостинг поднимается даже на обычном роутере D-Link Dir-320. Кроме затрат на оборудование, затраты на ПО не требуются. Это тупо дешевле.
Еще одним большим плюсом является кроссплатформенность. Работает на 99% ОС.
Php-разработчик в тех же 99% случаях обходится стандартными средствами языка и ему легко перенести свой проект на другой хостинг без лишнего геморроя.
Это самые заметные и не холиварные плюсы. Производительность, простота кода и т.д. оспаривать не буду, с ASP не знаком, но судя по отзывал гуру - php и тут лидирует.

Предположу что ASP более гибок и надежен, хотя вконтакту с фэйсбуком хватает и php.

Добавлено: 19 августа 2011 г. в 11:53

Ответить

#23 Константин

Константин

никто не отменял mono
apt-cache search mod_mono
libapache2-mod-mono - Apache module for running ASP.NET applications on Mono
asp.net-examples - demo pages for ASP.NET 1.1 infrastructure
asp.net2-examples - demo pages for ASP.NET 1.1 and 2.0 infrastructure
mono-apache-server1 - ASP.NET 1.1 backend for mod_mono Apache module
mono-apache-server2 - ASP.NET 2.0 backend for mod_mono2 Apache module
mono-apache-server - ASP.NET backend for mod_mono2 Apache module - default version

но это же некрософт.

Добавлено: 06 сентября 2011 г. в 14:53

Ответить

#25 lix

lix

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

http://www.php.net/manual/en/book.pdo.php

Добавлено: 05 ноября 2011 г. в 14:34

Ответить

#26 Александр

Александр

Начал юзать PDO. Реально клевая вещь. Вначале как говорится у страха глаза велики - думал не осилю после mysqli, но за сутки уже написал пару простых функций для выборки колонок, строк, таблиц, ячейки. Все очень просто и не сказал бы что сильно уж отличается от mysql(i) - основа похожая, правда синтаксис другой в основном. Главное - это мультиплатформенность баз данных. Да и простота в обращении даже проще мне показалась чем в mysqli. Будущее за PDO судя по всему.

Добавлено: 07 ноября 2011 г. в 14:26

Ответить

#27 Uxenus

Uxenus

@Канат Гайлимов,

На ASP.NET видел разные сайты, но он имхо больше подходит для крупных проектов


Facebook - норм величина ? ... написан на PHP

Добавлено: 28 января 2012 г. в 17:28

Ответить

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

Уважаемые посетители! Вы можете оставить свой коммент к этому посту. Пожалуйста, соблюдайте нормы приличия и этики.

Улыбка Убей себя ап стену :) Но-но-но! Лепота... Уррряя! В натуре Подмигиваю Ну извините... Ржунимагу Выпьем, друг! SOS Речь Бубен 0_o