PHP PDO, Краткая инструкция.

Author Автор: Роман Чернышов    Опубликовано: 30 марта 2012

За последние пол года работы над собственными проектами, я все чаще стал склоняться к внедрению 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') ) {
....
}
?>

Надеюсь данный пост(краткая инструкция) не раз послужит палочкой-выручалочкой, для вебмастеров и программистов, кто только начал использовать сию библиотеку в своих проектах.

Category PHP     Tags ,

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

Автор блога
Чернышов Роман
Роман Чернышов
Веб-разработчик, Full Stack
Senior, Architector
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка