PHP PDO, Краткая инструкция.
За последние пол года работы над собственными проектами, я все чаще стал склоняться к внедрению PDO в них. для этого есть несколько весомых аргументов, во первых PHP библиотека PDO работает гораздо быстрее старой библиотеки mysqli. Во вторых предоставляет готовый интерфейс взаимодействия с БД, причем независимо от типа БД. Т.е. вы можете писать в своих скриптах запросы для mySQL, но при этом использовать базу данных SQLite, в этом случае PDO эмулирует нужные функции своими силами (для каждого типа БД требуется подключение драйвера). В третьих, с помощью этой библиотеки, используя стандартные средства, можно организовать фильтрацию запросов в базу данных, проверку запросов по маске, проверку запросов на наличие определенных типов данных, что существенно снижает вероятность инъекции.
Далее я представлю несколько примеров работы с PDO, часть из них я позаимствовал с других источников в интернете. Дабы не переписывать простые примеры работы библиотеки.
Подключение к базе БД MySQL средствами PDO
define ( SQLCHARSET, "cp1251" ); //define ( SQLCHARSET, "uft8" ); $dbhost = "localhost"; $dbname = "dbname"; $dbuser = "username"; $dbpass = "pawwsord"; $db = new PDO ( 'mysql:host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass ); $db->query ( 'SET character_set_connection = ' . SQLCHARSET . ';' ); $db->query ( 'SET character_set_client = ' . SQLCHARSET . ';' ); $db->query ( 'SET character_set_results = ' . SQLCHARSET . ';' ); |
Выборка одного поля php pdo
$row = $db->query("select row from tablename WHERE 1;")->fetch(); $row=$row[row]; |
Получаем одну строку:
$row = $db->query("select row from tablename WHERE 1;")->fetch(); |
Все строки
$row = $db->query("select row from tablename WHERE 1;")->fetchAll(); |
Определение количества строк
$player_stat = $db->query("SELECT COUNT(*) FROM players WHERE name = '".$val['name']."';")->fetchColumn() |
Определяем все имена полей таблицы
$sql = "SHOW COLUMNS FROM tablename;"; $dbresult = $db->prepare ( $sql ); $dbresult->execute (); $dbfield = $dbresult->fetchAll (); $count = $dbresult->rowCount(); for ($i=0; $i<$count; $i++) { $keys[$i]="~".$dbfield[$i]['Field']; } |
Выборка нескольких полей из таблицы php pdo
$sql = "SELECT * from tablename where 1;"; $result = $db->prepare ( $sql ); $result->execute (); $tdata = $result->fetchAll (); foreach ($tdata as $row){ //любые действия например echo "<b>".$row['name']."</b>\n"; } |
Определения кода ошибки
$ercode = $db->exec("delete from tablename where id='".$id."';")->errorCode(); print_r($ercode); |
Определения действия в зависимости от кода ошибки php pdo
/* например что то удаляем */ $db->exec("delete from tablename where id='".$id."';"); /* и смотрим */ $ercode=$db->errorCode(); $ercode=$ercode[0]; $ref=$_SERVER['HTTP_REFERER'] if($ercode>0){ echo "<script language=\"javascript\">alert('Системная ошибка.'); location.href='$ref';</script>"; }else{ echo "<script language=\"javascript\">location.href='$ref';</script>"; } |
Вставить новую строку, если данные хранятся в массиве $t в формате $t[название столбца] = данные
$q = $db->prepare("INSERT INTO table (".(implode(",",array_keys($t))).") VALUES ('".(implode("','",$t))."');")->execute(); |
Изменяем строку
$db->prepare("UPDATE table SET column='data' WHERE id = '1';")->execute(); |
Определения последнего ID php pdo
$lastid = $db->lastInsertId(); |
И на последок, проверка наличия подключения модулей PHP php-pdo и php-pdo_mysq:
<?php if ( !extension_loaded('pdo') ){ .... }elseif ( !extension_loaded('pdo_mysql') ) { .... } ?> |
Надеюсь данный пост(краткая инструкция) не раз послужит палочкой-выручалочкой, для вебмастеров и программистов, кто только начал использовать сию библиотеку в своих проектах.

Автор:






