pdo_017.phpt 2.0 KB

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