Persistence
Uchování dat po skončení běhu skriptu.
- serializace a ukládání do souboru
serialize
/unserialize
json_encode
/json_decode
- databáze
PDO (PHP Data Objects)
- jednotná abstraktní vrstva pro přístup k datům pro různé DB systémy
- MySQL, PostgreSQL, MsSQL, SQLite, Oracle, …
- připravené dotazy
- proceduralní nebo objektový přístup
SQL
Připojení
php -m | grep pdo
// PostgreSQL
$dsn = 'pgsql:host=127.0.0.1;port=5432;dbname=testdb;';
$user = 'dbuser';
$password = 'dbpass';
$db = new \PDO($dsn, $user, $password);
// MySQL
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$db = new \PDO($dsn, $user, $password);
// SQLite
$dsn = 'sqlite:eshop.db';
$db = new \PDO($dsn);
Dotazování
$query = 'SELECT * FROM `order` WHERE id = 1'; $statement = $db->query($query); foreach($statement as $row) { print_r($row); }
$query = 'SELECT * FROM `order` WHERE id = :id'; $statement = $db->prepare($query); $statement->execute(["id" => 1]); print_r($statement->fetch());
Vkládání
$query = 'INSERT INTO `order` (id, customer_id) VALUES (1, 2)';
$statement = $db->prepare($query);
$statement->execute();
Připravené dotazy
- bezpečnější vzhledem k SQL injection
- PDO :: prepare
- PDOStatement :: execute
Připravené dotazy
$query = 'SELECT * FROM `order` WHERE id = :order_id';
$statement = $db->prepare($query);
$statement->execute(['order_id' => 1]);
print_r($statement->fetch());
$query = "INSERT INTO `order` (id, customer_id) VALUES (:id, :customer)";
$statement = $db->prepare($query);
$statement->execute([
'id' => 1,
'customer' => 2
]);
ActiveRecord
- návrhový vzor
- objektově relační mapování (ORM)
- instance se umí uložit (
INSERT
,UPDATE
) - třída umí vyhledávat (
SELECT
)
DataMapper
- další návrhový vzor pro ORM
- doménový objekt neobsahuje CRUD operace (narozdíl od ActiveRecord)
- mapovací objekt (entity manager)
PHPStorm
- panel Structure
- panel Database
- + → Data source → SQLite → install driver