Chciałbym zapytać o taką rzecz: jak postępować w przypadku gdy
strona używa bazy danych, a może wystąpić błąd przerywający tworzenie strony.
Pytam bo nie wiem czy PHP automatycznie wycofuje transakcje i zamyka połączenie z bazą.
Czy takie rozwiązanie z funkcją shutdownDatabase() ma sens:
function openDatabase() {
global $db, $inTransaction;
$db = new mysqli('localhost', MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE);
if (!empty($db->connect_error)) {
$db = null;
return false;
}
$db->query('SET NAMES latin2');
$db->query('SET CHARACTER SET latin2 COLLATE latin2_polish_ci');
$db->autocommit(true);
$inTransaction = false;
register_shutdown_function('shutdownDatabase');
return true;
}
function closeDatabase() {
global $db;
if (!is_null($db)) {
$db->close();
}
}
function startTransaction() {
global $db, $inTransaction;
$db->autocommit(false);
$db->query('START TRANSACTION');
$inTransaction = true;
}
function commitTransaction() {
global $db, $inTransaction;
$inTransaction = false;
if (!$db->commit()) {
$db->rollback();
$db->autocommit(true);
error(ERRMSG_DATABASE_OPERATION_FAILED);
return;
}
$db->autocommit(true);
}
function rollbackTransaction() {
global $db, $inTransaction;
$inTransaction = false;
if (!$db->rollback()) {
$db->autocommit(true);
error(ERRMSG_DATABASE_OPERATION_FAILED);
return;
}
$db->autocommit(true);
}
function shutdownDatabase() {
if ($inTransaction) {
rollbackTransaction();
}
closeDatabase();
}