Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΈΠΊΡΠ°ΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ PDO ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ½ΡΡΡ,
ΠΊΠ°ΠΊ PDO ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°ΠΏΡΠΎΡΡ.
Π’Π΅ΠΌ, ΠΊΡΠΎ ΠΏΡΠ΅ΠΆΠ΄Π΅ Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°ΡΡ 4 Π³Π»Π°Π²Π½ΡΡ
Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ: Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡΡ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ, ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ ΠΈ Π΄ΠΎΠ»Π³ΠΎΠ²Π΅ΡΠ½ΠΎΡΡΡ
(Π°Π½Π³Π». Atomicity, Consistency, Isolation and Durability, ΠΈΠ»ΠΈ ACID). ΠΠΎΠ²ΠΎΡΡ ΠΏΡΠΎΡΡΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ,
ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ
ΠΈ Π±Π΅Π· ΠΏΠΎΠΌΠ΅Ρ
ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ Π΄ΡΡΠ³ΠΈΡ
ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ°ΠΏΠ½ΠΎ. Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠΌΠ΅Π½ΡΡΡΡΡ
ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π΅ΡΡ Π½Π΅ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π»ΠΈ, ΡΡΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ
ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠΊΡΠΈΠΏΡΠ°Ρ
.
Π Π°Π±ΠΎΡΠ° ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΡΠ°ΡΡΠΎ ΡΠΎΡΡΠΎΠΈΡ Π² Β«Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠΈΒ» ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ,
ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ ΡΠ΅Π»ΠΎΠ΅; ΠΏΡΠΈΡΡΠ½ΡΠΉ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ ΡΠ°ΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΡ
ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠ΅Π·ΠΊΠΎΠΌ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΡΠΈΡ
ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ,
ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΡΡΠΊΠΎΡΡΡΡ ΡΠΊΡΠΈΠΏΡΡ ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ°ΡΡ ΠΈΡ
Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡ,
Ρ
ΠΎΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°.
ΠΠ΅ ΠΊΠ°ΠΆΠ΄Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ
ΠΌΠΎΠ΄ΡΠ»Ρ PDO Π²ΡΠ½ΡΠΆΠ΄Π΅Π½ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Β«Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈΒ».
Π ΡΠ΅ΠΆΠΈΠΌΠ΅ Π°Π²ΡΠΎΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
Π² Π½Π΅ΡΠ²Π½ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π΅ΡΠ»ΠΈ Π‘Π£ΠΠ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ,
ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ, Π΅ΡΠ»ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ.
Π―Π²Π½ΠΎΠ΅ Π½Π°ΡΠ°Π»ΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ
ΠΌΠ΅ΡΠΎΠ΄Π° PDO::beginTransaction(). ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ
ΠΌΠΎΠ΄ΡΠ»Ρ Π²ΡΠ±ΡΠΎΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ PDOException, Π΅ΡΠ»ΠΈ Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°ΡΠΈΠΉ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ,
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠΏΡΡΠΊΠ° Π½Π°ΡΠ°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° β ΡΠ΅ΡΡΡΠ·Π½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°. ΠΠ½ΡΡΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠΊΡΠΈΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ PDO::commit(), Π΅ΡΠ»ΠΈ ΠΊΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ,
ΠΈΠ»ΠΈ ΠΎΡΠΊΠ°ΡΡΠ²Π°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ PDO::rollBack(),
Π΅ΡΠ»ΠΈ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΊΠΎΠ΄Π° Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°.
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅
ΠΠΎΠ΄ΡΠ»Ρ PDO ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°.
ΠΠ΅ΡΠΎΠ΄ PDO::beginTransaction() Π²Π΅ΡΠ½ΡΡ true Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ,
Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΠΎΡ Π½Π° Π·Π°ΠΏΡΡΠΊ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ,
Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
ΡΡΠ»ΠΎΠ²ΠΈΡΡ
ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π²ΡΡΡΠ½ΠΈΡΡΡ, ΡΡΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ.
Π ΡΠ°ΠΊΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΏΠΎΠΏΡΡΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Π² ΡΠ°Π±Π»ΠΈΡΠ°Ρ
MyISAM Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
MySQL.
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅
ΠΠ΅ΡΠ²Π½ΡΠ΅ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ DDL-Π·Π°ΠΏΡΠΎΡΠΎΠ²:
ΠΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π½Π΅ΡΠ²Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ COMMIT
ΠΈ ΡΠΈΠΊΡΠΈΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ΅ΡΠΈΠΈ DDL-Π·Π°ΠΏΡΠΎΡΠΎΠ² (Π°Π½Π³Π». Database Definition Language)
Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ DROP TABLE ΠΈΠ»ΠΈ CREATE TABLE.
ΠΠΎΡΡΠΎΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ,
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΊΡΠΈΡΡΡΡΡΡ, ΠΈ ΠΎΡΠΊΠ°ΡΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
Ρ ΡΠ°ΠΊΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ½ΠΎΡΡΡΡΡ Π‘Π£ΠΠ MySQL
ΠΈ Oracle.
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ Π½Π΅ΡΠ²Π½ΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ
<?php
$pdo->beginTransaction();
$pdo->exec("INSERT INTO users (name) VALUES ('Rasmus')");
$pdo->exec("CREATE TABLE test (id INT PRIMARY KEY)"); // ΠΠ΅ΡΠ²Π½Π°Ρ ΡΠΈΠΊΡΠ°ΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ COMMIT Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅
$pdo->rollBack(); // ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ INSERT/CREATE Π² ΠΠ MySQL ΠΈΠ»ΠΈ Oracle
?>
ΠΡΡΡΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°: ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
Ρ ΡΠ°ΠΊΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ
ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ DDL-Π·Π°ΠΏΡΠΎΡΠΎΠ² Π²Π½ΡΡΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ. DDL-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡ
ΠΈΠ· ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.
ΠΠΎΠ΄ΡΠ»Ρ PDO Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠΊΠ°ΡΠΈΡ Π½Π΅Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠΊΡΠΈΠΏΡΠ°
ΠΈΠ»ΠΈ ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΡΠΊΠ°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ β ΠΌΠ΅ΡΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ·Π±Π΅Π³Π°ΡΡ
Π½Π°ΡΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΠ³Π΄Π° ΡΠΊΡΠΈΠΏΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ.
ΠΠΎΠ΄ΡΠ»Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
Π½Π°ΡΡΡΠΈΠ»ΠΎΡΡ, ΡΠ°Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ,
ΠΈ ΠΎΡΠΊΠ°ΡΡΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ
.
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΠΊΠ°ΡΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΎΡΠΊΡΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ
PDO::beginTransaction(). ΠΡΠΈ ΡΡΡΠ½ΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ,
PDO Π½Π΅ ΡΠ·Π½Π°Π΅Ρ ΠΎΠ± ΡΡΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΠΎΡΠΊΠ°ΡΠΈΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΏΡΠΈ ΡΠ±ΠΎΠ΅.
ΠΡΠΈΠΌΠ΅Ρ #2 ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Π±ΠΎΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ
ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ° Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ 23. ΠΡΠΎΠΌΠ΅ Π²Π²ΠΎΠ΄Π° Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ
Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Π·Π°ΡΠΏΠ»Π°ΡΡ. ΠΠΌΠ΅ΡΡΠΎ Π΄Π²ΡΡ
ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
ΠΎΠ±Π΅ΡΠ½ΡΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ
PDO::beginTransaction()
ΠΈ PDO::commit(), ΡΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π½ΠΈΠΊΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΡ
ΡΡΠΈΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΏΠΎΠΊΠ° Π²ΡΡΠ°Π²ΠΊΠ° Π΄Π°Π½Π½ΡΡ
Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ. ΠΡΠΈ ΡΠ±ΠΎΠ΅
Π±Π»ΠΎΠΊ catch ΠΎΡΠΊΠ°ΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π½Π΅ΡΠ»ΠΈ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π°ΡΠ°Π»Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΠΈ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
<?php
try {
$dbh = new PDO(
'odbc:SAMPLE',
'db2inst1',
'ibmdb2',
array(PDO::ATTR_PERSISTENT => true)
);
echo "ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ»ΠΈΡΡ\n";
} catch (Exception $e) {
die("ΠΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ: " . $e->getMessage());
}
try {
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
$dbh->exec("INSERT INTO staff (id, first, last) VALUES (23, 'Joe', 'Bloggs')");
$dbh->exec("INSERT INTO salarychange (id, amount, changedate) VALUES (23, 50000, NOW())");
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "ΠΡΠΈΠ±ΠΊΠ°: " . $e->getMessage();
}
?>
Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ
; Π² ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π·Π°Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ
ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΡΡ
ΡΠΎΠ·Π΄Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ; Π°ΠΊΡΠΈΠ²Π½Π°Ρ
ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠ΅,
ΠΏΠΎΠΊΠ° ΠΈΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠ΅ΠΉ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡ
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
.