pdo

PDO — PHP Data Objects

PDO — это такой уровень абстракции, который лежит между php и драйверами базы данных. На сегодня php поддерживает почти все известные типы баз данных:

  • DBLIB: FreeTDS / Microsoft SQL Server / Sybase.
  • Firebird: Firebird/Interbase 6.
  • IBM (IBM DB2).
  • INFORMIX — IBM Informix Dynamic Server.
  • MySQL: MySQL 3.x/5.x.
  • OCI: Oracle Call Interface.
  • ODBC: ODBC v.3 (IBM DB2 and unixODBC).
  • PGSQL: PostgreSQL.
  • SQLite: SQLite 2.x/3.x.

Чтобы посмотреть, какие драйвера поддерживаются, пишем так:

foreach(PDO::getAvailableDrivers() as $driver) {
   echo $driver.'
';
}

Существует много различных баз данных. Многие популярные CMS (система управления контентом) используют MySQL. А что, если я хочу использовать SQLite? Нужно ли мне переписывать весь код CMS? Рассмотрим соединение с БД у разных баз данных:

//MySQL
mysql_connect ($host, $user, $password);
mysql_select_db ($db);
//SQLite
$dbh = sqlite_open($db, 0666);
//PostgreSQL
pg_connect ("host=$host dbname=$db user=$user password=$password");

А теперь это же соединение с использованием PDO:

//MySQL
$conn = new PDO ("mysql:host=$host; dbname=$db, $user, $pass);
//SQLite
$conn = new PDO ("sqlite:$db");
//PostgreSQL
$conn = new PDO ("pgsql:host=$host dbname=$db, $user, $pass");

Из примера видно, что разница только в строке соединения. И если мы хотим в своей CMS сделать поддержку нескольких баз данных — в единственном месте при помощи switch можем расписать строку соединения.

Для этого нам нужно знать строки соединения с различными базами данных:

//MySQL
("mysql:host=hostname; dbname=mysql", "username", "password");
//SQLite
("sqlite:/path/to/database.db")
("sqlite::memory:"); //т.е. хранится в памяти
//PostgreSQL
("pgsql:dbname=pdo; host=hostname", "username", "password");
//Oracle
("OCI:dbname=mydatabase;charset=UTF-8", "username", "password");
//ODBC
("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\database.mdb;Uid=Admin");
//Firebird
("firebird:dbname=hostname:C:\path\to\database.fdb", "username", "password");
//Informix
("informix:DSN=InformixDB", "username", "password");
//DBLIB
("dblib:host=hostname:port;dbname=mydb","username","password");

Т.е. прописываем эти строки в конструкции switch — у нас поддержка нескольких баз данных. Но помимо строк соединения, нужно прописать еще некоторые элементы в swith.




Добавить комментарий

Ваш e-mail не будет опубликован.