PHP  
 PHP_5_6
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

Test Failure Report for ext/pdo_mysql/tests/pdo_mysql_begintransaction.phpt ('PDO->beginTransaction()')

Script

1: <?php
2:     
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR 'mysql_pdo_test.inc');
3:     
$db MySQLPDOTest::factory();
4:     
MySQLPDOTest::createTestTable($dbMySQLPDOTest::detect_transactional_mysql_engine($db));
5:
6:     if (
!== $db->getAttribute(PDO::ATTR_AUTOCOMMIT))
7:         
printf("[001] Autocommit should be on by default\n");
8:
9:     if (
false == $db->beginTransaction())
10:         
printf("[002] Cannot start a transaction, [%s] [%s]\n",
11:             
$db->errorCode(), implode(' '$db->errorInfo()));
12:
13:     if (
!== $db->getAttribute(PDO::ATTR_AUTOCOMMIT))
14:         
printf("[003] Autocommit should be on by default, beginTransaction() shall not impact it\n");
15:
16:     if (
== $db->exec('DELETE FROM test'))
17:         
printf("[004] No rows deleted, can't be true.\n");
18:
19:     
/* This is the PDO way to close a connection */
20:     
$db null;
21:     
$db MySQLPDOTest::factory();
22:
23:     
/* Autocommit was off - by definition. Commit was not issued. DELETE should have been rolled back. */
24:     
if (!($stmt $db->query('SELECT id, label FROM test ORDER BY id ASC')))
25:         
printf("[005] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
26:
27:     
$row $stmt->fetch(PDO::FETCH_ASSOC);
28:     
var_dump($row);
29:
30:     if (!
$db->beginTransaction())
31:         
printf("[006] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
32:
33:     if (
!== $db->exec(sprintf('DELETE FROM test WHERE id = %d'$row['id'])))
34:         
printf("[007] DELETE should have indicated 1 deleted row, [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
35:
36:     if (!
$db->commit())
37:         
printf("[008] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
38:
39:     if (
!== $db->getAttribute(PDO::ATTR_AUTOCOMMIT))
40:         
printf("[009] Autocommit should be on after commit()\n");
41:
42:     if (!(
$stmt $db->query(sprintf('SELECT id, label FROM test WHERE id = %d'$row['id']))))
43:         
printf("[010] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
44:
45:     
var_dump($stmt->fetch(PDO::FETCH_ASSOC));
46:
47:     if (!
$db->beginTransaction())
48:         
printf("[011] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
49:
50:     
$db->exec(sprintf("INSERT INTO test(id, label) VALUES (%d, 'z')"$row['id']));
51:
52:     if (!(
$stmt $db->query(sprintf('SELECT id, label FROM test WHERE id = %d'$row['id']))))
53:         
printf("[012] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
54:
55:     
$new_row1 $stmt->fetch(PDO::FETCH_ASSOC);
56:     
var_dump($new_row1);
57:
58:     if (!
$db->commit())
59:         
printf("[013] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
60:
61:     if (!(
$stmt $db->query(sprintf('SELECT id, label FROM test WHERE id = %d'$row['id']))))
62:         
printf("[014] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
63:
64:     
$new_row2 $stmt->fetch(PDO::FETCH_ASSOC);
65:     if (
$new_row1 != $new_row2) {
66:         
printf("[015] Results must not differ!\n");
67:         
var_dump($new_row1);
68:         
var_dump($new_row2);
69:     }
70:
71:     if (!
$db->beginTransaction())
72:         
printf("[016] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
73:
74:     if (
!== $db->exec(sprintf('DELETE FROM test WHERE id = %d'$row['id'])))
75:         
printf("[017] DELETE should have indicated 1 deleted row, [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
76:
77:     if (!
$db->rollback())
78:         
printf("[018] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
79:
80:     if (
!== $db->getAttribute(PDO::ATTR_AUTOCOMMIT))
81:         
printf("[019] Autocommit should be on after rollback\n");
82:
83:     if (!(
$stmt $db->query(sprintf('SELECT id, label FROM test WHERE id = %d'$row['id']))))
84:         
printf("[020] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
85:
86:     
$new_row2 $stmt->fetch(PDO::FETCH_ASSOC);
87:     if (
$new_row1 != $new_row2) {
88:         
printf("[021] Results must not differ!\n");
89:         
var_dump($new_row1);
90:         
var_dump($new_row2);
91:     }
92:
93:     
// now, lets check the server variables
94:     
if (!($stmt $db->query('SELECT @@autocommit as auto_commit')))
95:         
printf("[022] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
96:
97:     
$tmp $stmt->fetch(PDO::FETCH_ASSOC);
98:     if (
$tmp['auto_commit'] != 1)
99:         
printf("[023] MySQL Server should indicate autocommit mode, expecting 1, got '%s', [%d] %s\n",
100:             
$tmp['auto_commit'], $stmt->errorCode(), $stmt->errorInfo());
101:
102:     if (!
$db->beginTransaction())
103:         
printf("[024] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
104:
105:     if (!(
$stmt $db->query('SELECT @@autocommit as auto_commit')))
106:         
printf("[025] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
107:
108:     
$tmp $stmt->fetch(PDO::FETCH_ASSOC);
109:     if (
$tmp['auto_commit'] != 0)
110:         
printf("[026] Autocommit mode of the MySQL Server should be off, got '%s', [%d] %s\n",
111:             
$tmp['auto_commit'], $stmt->errorCode(), trim(implode(' '$stmt->errorInfo())));
112:
113:     
$db->commit();
114:     
// Now we should be back to autocommit - we've issues a commit
115:     
if ($tmp['auto_commit'] != 1)
116:         
printf("[027] MySQL Server should indicate autocommit mode, expecting 1, got '%s', [%d] %s\n",
117:             
$tmp['auto_commit'], $stmt->errorCode(), $stmt->errorInfo());
118:
119:     
// Turn off autocommit using a server variable
120:     
$db->exec('SET @@autocommit = 0');
121:     if (
=== $db->getAttribute(PDO::ATTR_AUTOCOMMIT))
122:         
printf("[028] I'm confused, how can autocommit be on? Didn't I say I want to manually control transactions?\n");
123:
124:     if (!
$db->beginTransaction())
125:         
printf("[029] Cannot start a transaction, [%d] %s\n",
126:             
$db->errorCode(), implode(' '$db->errorInfo()));
127:
128:     try {
129:         if (
false !== $db->beginTransaction()) {
130:             
printf("[030] No false and no exception - that's wrong.\n");
131:         }
132:     } catch (
PDOException $e) {
133:         
assert($e->getMessage() != '');
134:     }
135:
136:     
// TODO: What about an engine that does not support transactions?
137:     
$db MySQLPDOTest::factory();
138:     
MySQLPDOTest::createTestTable($db'MyISAM');
139:
140:     if (
false == $db->beginTransaction())
141:         
printf("[031] Cannot start a transaction, [%s] [%s]\n",
142:             
$db->errorCode(), implode(' '$db->errorInfo()));
143:
144:     if (
!== $db->getAttribute(PDO::ATTR_AUTOCOMMIT))
145:         
printf("[032] Autocommit should be on my default, beginTransaction() should not change that\n");
146:
147:     if (
== $db->exec('DELETE FROM test'))
148:         
printf("[033] No rows deleted, can't be true.\n");
149:
150:     if (!
$db->commit())
151:         
printf("[034] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
152:
153:     if (
false == $db->beginTransaction())
154:         
printf("[035] Cannot start a transaction, [%s] [%s]\n",
155:             
$db->errorCode(), implode(' '$db->errorInfo()));
156:
157:     if (
== $db->exec("INSERT INTO test(id, label) VALUES (1, 'a')"))
158:         
printf("[036] Cannot insert data, [%s] [%s]\n",
159:             
$db->errorCode(), implode(' '$db->errorInfo()));
160:
161:     
// Should cause a Server warning but no error
162:     
if (!$db->rollback())
163:         
printf("[037] [%s] %s\n"$db->errorCode(), implode(' '$db->errorInfo()));
164:
165:     
var_dump($db->errorCode());
166:
167:     if (
!= $db->exec('DELETE FROM test'))
168:         
printf("[038] No rows deleted, can't be true.\n");
169:
170:     print 
"done!";
171:
?>
172:

Expected

array(2) {
  [%u|b%"id"]=>
  %unicode|string%(1) "1"
  [%u|b%"label"]=>
  %unicode|string%(1) "a"
}
bool(false)
array(2) {
  [%u|b%"id"]=>
  %unicode|string%(1) "1"
  [%u|b%"label"]=>
  %unicode|string%(1) "z"
}
[026] Autocommit mode of the MySQL Server should be off, got '1', [0] 00000
[028] I'm confused, how can autocommit be on? Didn't I say I want to manually control transactions?
%unicode|string%(5) "00000"
done!

Output

array(2) {
  ["id"]=>
  string(1) "1"
  ["label"]=>
  string(1) "a"
}
Out of memory

Diff

007+ Out of memory
007- bool(false)
008- array(2) {
009-   [%u|b%"id"]=>
010-   %unicode|string%(1) "1"
011-   [%u|b%"label"]=>
012-   %unicode|string%(1) "z"
013- }
014- [026] Autocommit mode of the MySQL Server should be off, got '1', [0] 00000
015- [028] I'm confused, how can autocommit be on? Didn't I say I want to manually control transactions?
016- %unicode|string%(5) "00000"
017- done!

 

Generated at Mon, 27 Nov 2017 05:04:32 +0000 (16 days ago)

Copyright © 2005-2017 The PHP Group
All rights reserved.