xref: /PHP-8.0/ext/pdo/tests/pdo_017.phpt (revision c5401854)
1--TEST--
2PDO Common: transactions
3--SKIPIF--
4<?php
5if (!extension_loaded('pdo')) die('skip');
6$dir = getenv('REDIR_TEST_DIR');
7if (false == $dir) die('skip no driver');
8require_once $dir . 'pdo_test.inc';
9PDOTest::skip();
10
11$db = PDOTest::factory();
12try {
13  $db->beginTransaction();
14} catch (PDOException $e) {
15  die('skip no working transactions: ' . $e->getMessage());
16}
17
18if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
19    require_once(__DIR__ . DIRECTORY_SEPARATOR . '../../pdo_mysql/tests/mysql_pdo_test.inc');
20    if (false === MySQLPDOTest::detect_transactional_mysql_engine($db)) {
21        die('skip your mysql configuration does not support working transactions');
22    }
23}
24?>
25--FILE--
26<?php
27if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/');
28require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
29$db = PDOTest::factory();
30
31if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
32    require_once(__DIR__ . DIRECTORY_SEPARATOR . '../../pdo_mysql/tests/mysql_pdo_test.inc');
33    $suf = ' ENGINE=' . MySQLPDOTest::detect_transactional_mysql_engine($db);
34} else {
35    $suf = '';
36}
37
38$db->exec('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, val VARCHAR(10))'.$suf);
39$db->exec("INSERT INTO test VALUES(1, 'A')");
40$db->exec("INSERT INTO test VALUES(2, 'B')");
41$db->exec("INSERT INTO test VALUES(3, 'C')");
42$delete = $db->prepare('DELETE FROM test');
43
44function countRows($action) {
45    global $db;
46    $select = $db->prepare('SELECT COUNT(*) FROM test');
47    $select->execute();
48    $res = $select->fetchColumn();
49    return "Counted $res rows after $action.\n";
50}
51
52echo countRows('insert');
53
54$db->beginTransaction();
55$delete->execute();
56echo countRows('delete');
57$db->rollBack();
58
59echo countRows('rollback');
60
61$db->beginTransaction();
62$delete->execute();
63echo countRows('delete');
64$db->commit();
65
66echo countRows('commit');
67
68?>
69--EXPECT--
70Counted 3 rows after insert.
71Counted 0 rows after delete.
72Counted 3 rows after rollback.
73Counted 0 rows after delete.
74Counted 0 rows after commit.
75