Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_affected_rows.phpt, revision 1.1.1.2
1.1 misho 1: --TEST--
2: mysqli_stmt_affected_rows()
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifemb.inc');
7: require_once('skipifconnectfailure.inc');
8: ?>
9: --FILE--
10: <?php
11: require_once("connect.inc");
12:
13: $tmp = NULL;
14: $link = NULL;
15:
16: if (!is_null($tmp = @mysqli_stmt_affected_rows()))
17: printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
18:
19: if (!is_null($tmp = @mysqli_stmt_affected_rows($link)))
20: printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
21:
22: if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
23: printf("Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
24: $host, $user, $db, $port, $socket);
25: }
26: $stmt = mysqli_stmt_init($link);
27:
28: if (!mysqli_stmt_prepare($stmt, 'DROP TABLE IF EXISTS test') ||
29: !mysqli_stmt_execute($stmt)) {
30: printf("[003] Failed to drop old test table: [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
31: }
32:
33: if (!mysqli_stmt_prepare($stmt, 'CREATE TABLE test(id INT, label CHAR(1), PRIMARY KEY(id)) ENGINE = ' . $engine) ||
34: !mysqli_stmt_execute($stmt)) {
35: printf("[004] Failed to create test table: [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
36: }
37:
38: if (0 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
39: printf("[005] Expecting int/0, got %s/'%s'\n", gettype($tmp), $tmp);
40:
41: mysqli_stmt_close($stmt);
42: $stmt = mysqli_stmt_init($link);
43:
44: if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (1, 'a')") ||
45: !mysqli_stmt_execute($stmt))
46: printf("[006] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
47:
48: mysqli_stmt_close($stmt);
49: $stmt = mysqli_stmt_init($link);
50:
51: if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (100, 'z')") ||
52: !mysqli_stmt_execute($stmt))
53: printf("[007] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
54:
55: if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
56: printf("[008] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
57:
58: mysqli_stmt_close($stmt);
59: $stmt = mysqli_stmt_init($link);
60:
61: if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (100, 'z')") ||
62: !mysqli_stmt_execute($stmt))
63: // NOTE: the error message varies with the MySQL Server version, dump only the error code!
64: printf("[009] [%d] (error message varies with the MySQL Server version, check the error code)\n", mysqli_stmt_errno($stmt));
65:
1.1.1.2 ! misho 66: /* an error occurred: affected rows should return -1 */
1.1 misho 67: if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
68: printf("[010] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
69:
70: mysqli_stmt_close($stmt);
71: $stmt = mysqli_stmt_init($link);
72:
73: if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (1, 'a') ON DUPLICATE KEY UPDATE id = 4") ||
74: !mysqli_stmt_execute($stmt))
75: printf("[011] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
76:
77: if (2 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
78: printf("[012] Expecting int/2, got %s/%s\n", gettype($tmp), $tmp);
79:
80: mysqli_stmt_close($stmt);
81: $stmt = mysqli_stmt_init($link);
82:
83: if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) VALUES (2, 'b'), (3, 'c')") ||
84: !mysqli_stmt_execute($stmt))
85: printf("[013] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
86:
87: if (2 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
88: printf("[014] Expecting int/2, got %s/%s\n", gettype($tmp), $tmp);
89:
90: mysqli_stmt_close($stmt);
91: $stmt = mysqli_stmt_init($link);
92:
93: if (!mysqli_stmt_prepare($stmt, "INSERT IGNORE INTO test(id, label) VALUES (1, 'a')") ||
94: !mysqli_stmt_execute($stmt))
95: printf("[015] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
96:
97: if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
98: printf("[016] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
99:
100: if (!($res = mysqli_query($link, "SELECT count(id) AS num FROM test")) ||
101: !($tmp = mysqli_fetch_assoc($res)))
102: printf("[017] [%d] %s\n", mysqli_error($link), mysqli_error($link));
103: $num = (int)$tmp['num'];
104: mysqli_free_result($res);
105:
106: mysqli_stmt_close($stmt);
107: $stmt = mysqli_stmt_init($link);
108:
109: if (!mysqli_stmt_prepare($stmt, "INSERT INTO test(id, label) SELECT id + 10, label FROM test") ||
110: !mysqli_stmt_execute($stmt))
111: printf("[018] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
112:
113: if ($num !== ($tmp = mysqli_stmt_affected_rows($stmt)))
114: printf("[019] Expecting int/%d, got %s/%s\n", $num, gettype($tmp), $tmp);
115:
116: mysqli_stmt_close($stmt);
117: $stmt = mysqli_stmt_init($link);
118:
119: if (!mysqli_stmt_prepare($stmt, "REPLACE INTO test(id, label) values (4, 'd')") ||
120: !mysqli_stmt_execute($stmt))
121: printf("[020] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
122:
123: if (2 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
124: printf("[021] Expecting int/2, got %s/%s\n", gettype($tmp), $tmp);
125:
126: mysqli_stmt_close($stmt);
127: $stmt = mysqli_stmt_init($link);
128:
129: if (!mysqli_stmt_prepare($stmt, "REPLACE INTO test(id, label) values (5, 'e')") ||
130: !mysqli_stmt_execute($stmt))
131: printf("[022] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
132:
133: if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
134: printf("[023] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
135:
136: mysqli_stmt_close($stmt);
137: $stmt = mysqli_stmt_init($link);
138:
139: if (!mysqli_stmt_prepare($stmt, "UPDATE test SET label = 'a' WHERE id = 2") ||
140: !mysqli_stmt_execute($stmt))
141: printf("[024] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
142:
143: if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
144: printf("[025] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
145:
146: if (!mysqli_stmt_prepare($stmt, "UPDATE test SET label = 'a' WHERE id = 2") ||
147: !mysqli_stmt_execute($stmt))
148: printf("[026] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
149:
150: if (0 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
151: printf("[027] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
152:
153: mysqli_stmt_close($stmt);
154: $stmt = mysqli_stmt_init($link);
155:
156: if (!mysqli_stmt_prepare($stmt, "UPDATE test SET label = 'a' WHERE id = 100") ||
157: !mysqli_stmt_execute($stmt))
158: printf("[028] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
159:
160: if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
161: printf("[029] Expecting int/1, got %s/%s\n", gettype($tmp), $tmp);
162:
163: if (!mysqli_stmt_prepare($stmt, 'SELECT label FROM test WHERE id = 100') ||
164: !mysqli_stmt_execute($stmt))
165: printf("[030] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
166:
167: /* use it like num_rows */
168: /* PS are unbuffered, num_rows cannot determine the row count before all rows have been fetched and/or buffered */
169: if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
170: printf("[031] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
171:
172: if (0 !== ($tmp = mysqli_stmt_num_rows($stmt)))
173: printf("[032] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
174:
175: if (!mysqli_stmt_store_result($stmt))
176: printf("[033] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
177:
178: if (1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
179: printf("[034] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
180:
181: if (1 !== ($tmp = mysqli_stmt_num_rows($stmt)))
182: printf("[035] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
183:
184: mysqli_stmt_free_result($stmt);
185: mysqli_stmt_close($stmt);
186: $stmt = mysqli_stmt_init($link);
187:
188: if (!mysqli_stmt_prepare($stmt, 'SELECT label FROM test WHERE 1 = 2') ||
189: !mysqli_stmt_execute($stmt))
190: printf("[036] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
191:
192: /* use it like num_rows */
193: if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
194: printf("[037] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
195:
196: if (true !== ($tmp = mysqli_stmt_store_result($stmt)))
197: printf("[038] Expecting boolean/true, got %s\%s\n", gettype($tmp), $tmp);
198:
199: if (0 !== ($tmp = mysqli_stmt_num_rows($stmt)))
200: printf("[039] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
201:
202: if (0 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
203: printf("[040] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
204:
205: /* try to use stmt_affected_rows like stmt_num_rows */
206: /* stmt_affected_rows is not really meant for SELECT! */
207: if (mysqli_stmt_prepare($stmt, 'SELECT unknown_column FROM this_table_does_not_exist') ||
208: mysqli_stmt_execute($stmt))
209: printf("[041] The invalid SELECT statement is issued on purpose\n");
210:
211: if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
212: printf("[042] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
213:
214: if ($IS_MYSQLND) {
215: if (false !== ($tmp = mysqli_stmt_store_result($stmt)))
216: printf("[043] Expecting boolean/false, got %s\%s\n", gettype($tmp), $tmp);
217: } else {
218: if (true !== ($tmp = mysqli_stmt_store_result($stmt)))
219: printf("[043] Libmysql does not care if the previous statement was bogus, expecting boolean/true, got %s\%s\n", gettype($tmp), $tmp);
220: }
221:
222: if (0 !== ($tmp = mysqli_stmt_num_rows($stmt)))
223: printf("[044] Expecting int/0, got %s/%s\n", gettype($tmp), $tmp);
224:
225: if (-1 !== ($tmp = mysqli_stmt_affected_rows($stmt)))
226: printf("[045] Expecting int/-1, got %s/%s\n", gettype($tmp), $tmp);
227:
228: mysqli_stmt_close($stmt);
229: $stmt = mysqli_stmt_init($link);
230:
231: if (!mysqli_stmt_prepare($stmt, "DROP TABLE IF EXISTS test") ||
232: !mysqli_stmt_execute($stmt))
233: printf("[046] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
234:
235: mysqli_stmt_close($stmt);
236:
237: if (!is_null($tmp = mysqli_stmt_affected_rows($stmt)))
238: printf("[047] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
239:
240: mysqli_close($link);
241:
242: print "done!";
243: ?>
244: --CLEAN--
245: <?php
246: require_once("clean_table.inc");
247: ?>
248: --EXPECTF--
249: [009] [%d] (error message varies with the MySQL Server version, check the error code)
250:
251: Warning: mysqli_stmt_affected_rows(): Couldn't fetch mysqli_stmt in %s on line %d
252: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>