PDO - PHP Data Objects, унифицированный слой (API) для доступа к разным СУБД. PDO является объектно-ориентированной библиотекой, которая содержит несколько классов для работы с СУБД:
SELECT
.Для доступа к СУБД нужны следующие параметры:
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
Первым параметром конструктора PDO является так называемый DSN - строка, которая определяет тип СУБД, хост и имя базы. В зависимости от типа СУБД PDO подключает тот или иной драйвер СУБД и передает в него нужные настройки.
В случае успешного соединения (в противном случае происходит исключение PDOException
) можно работать с данными в СУБД:
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('SELECT * from FOO') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
http://pdo.asmer.php1.a-level.com.ua/init.php
Выше в коде показан один из способов выполнения запросов: использование метода query
объекта класса PDO ($dbh
, database handler)
с текстом запроса. query
возвращает объект класса PDOStatement
, который можно итерировать.
Существует так же более безопасный и в определенных случаях более быстрый двухэтапный способ:
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test2', "test2", "TeSt2");
$sth = $dbh->prepare('INSERT INTO person SET name = :name, surname = :surname, father_name = :father_name');
$sth->execute(array( ":name" => "Donald", ":surname" => "Trump", ":father_name" => "Moishovich"));
foreach($dbh->query("SELECT * FROM person") as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
http://pdo.asmer.php1.a-level.com.ua/prepare.php
Как видно, данные не передаются в запрос не как часть строки запроса, а в последствии в качестве ассоциативного массива. Несмотря на схожесть с предыдущим способом, запрос действительно подготавливается СУБД, после чего он выполняется быстрее, так как ему только передаются данные. Ко всему прочему это сводит на нет возможность SQL инъекций через поля.
Заполнить таблицы базы данных blog
с помощью PDO::prepare
.
Сделать простую одностраничную SQL-консоль, нечто среднее между mysql
в консоли и PHPMyAdmin
:
PDOException
, если удачно, сохраняем в сессию.textarea
для запроса.query
, результат выводим в HTML-таблицу, если это выборка. Текст запроса должен сохранится
в textarea
над HTML таблицей. Под textarea
выводится текст ошибки или количество записей, задействованных в запросе.twig
.