Annotation of embedaddon/php/ext/mysql/tests/mysql_fetch_field.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: mysql_fetch_field()
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifconnectfailure.inc');
7: ?>
8: --FILE--
9: <?php
10: include "connect.inc";
11:
12: $tmp = NULL;
13: $link = NULL;
14:
15: // Note: no SQL type tests, internally the same function gets used as for mysql_fetch_array() which does a lot of SQL type test
16: if (!is_null($tmp = @mysql_fetch_field()))
17: printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
18:
19: if (NULL !== ($tmp = @mysql_fetch_field($link)))
20: printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
21:
22: require('table.inc');
23:
24: $version = mysql_get_server_info($link);
25: if (!preg_match('@(\d+)\.(\d+)\.(\d+)@ism', $version, $matches))
26: printf("[003] Cannot get server version\n");
27: $version = ($matches[1] * 100) + ($matches[2] * 10) + $matches[3];
28:
29: if (!$res = mysql_query("SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 1", $link)) {
30: printf("[004] [%d] %s\n", mysql_errno($link), mysql_error($link));
31: }
32:
33: while ($tmp = mysql_fetch_field($res))
34: var_dump($tmp);
35: var_dump($tmp);
36:
37: mysql_free_result($res);
38:
39: if (!$res = mysql_query("SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 1", $link)) {
40: printf("[005] [%d] %s\n", mysql_errno($link), mysql_error($link));
41: }
42: if (false !== ($tmp = mysql_fetch_field($res, PHP_INT_MAX - 1)))
43: printf("[006] Expecting boolean/false got %s/%s\n", gettype($tmp), var_export($tmp, true));
44:
45: mysql_free_result($res);
46:
47: if (false !== ($tmp = mysql_fetch_field($res)))
48: printf("[007] Expecting boolean/false, got %s/%s\n", gettype($tmp), var_export($tmp, true));
49:
50: $types = array(
51: 'BIT' => array(1, 'int'),
52: 'TINYINT' => array(1, 'int'),
53: 'BOOL' => array('true', 'int'),
54: 'BOOL' => array(1, 'int'),
55: 'SMALLINT' => array(32767, 'int'),
56: 'MEDIUMINT' => array(8388607, 'int'),
57: 'INT' => array(100, 'int'),
58: 'BIGINT' => array(100, 'int'),
59: 'FLOAT' => array(100, 'real'),
60: 'DOUBLE' => array(100, 'real'),
61: 'DECIMAL' => array(100, 'real'),
62: 'DATE' => array(@date('Y-m-d'), 'date'),
63: 'DATETIME' => array(@date('Y-m-d H:i:s'), 'datetime'),
64: 'TIMESTAMP' => array(@date('Y-m-d H:i:s'), 'timestamp'),
65: 'TIME' => array(@date('H:i:s'), 'time'),
66: 'YEAR' => array(@date('Y'), 'year'),
67: 'CHAR(1)' => array('a', 'string'),
68: 'VARCHAR(1)' => array('a', 'string'),
69: 'BINARY(1)' => array('a', 'string'),
70: 'VARBINARY(1)' => array('a', 'string'),
71: 'TINYBLOB' => array('a', 'blob'),
72: 'TINYTEXT' => array('a', 'blob'),
73: 'BLOB' => array('a', 'blob'),
74: 'TEXT' => array('a', 'blob'),
75: 'MEDIUMBLOB' => array('a', 'blob'),
76: 'MEDIUMTEXT' => array('a', 'blob'),
77: 'LONGBLOB' => array('a', 'blob'),
78: 'LONGTEXT' => array('a', 'blob'),
79: 'ENUM("a", "b")' => array('a', 'string'), /* !!! */
80: 'SET("a", "b")' => array('a', 'string'), /* !!! */
81: );
82:
83: foreach ($types as $type_name => $type_desc) {
84: if (!mysql_query("DROP TABLE IF EXISTS test", $link))
85: printf("[008/%s] [%d] %s\n", $type_name, mysql_errno($link), mysql_error($link));
86: if (!mysql_query(sprintf("CREATE TABLE test(id INT, label %s) ENGINE = %s", $type_name, $engine), $link)) {
87: // server and/or engine might not support the data type
88: continue;
89: }
90:
91: if (is_string($type_desc[0]))
92: $insert = sprintf("INSERT INTO test(id, label) VALUES (1, '%s')", $type_desc[0]);
93: else
94: $insert = sprintf("INSERT INTO test(id, label) VALUES (1, %s)", $type_desc[0]);
95:
96: if (!mysql_query($insert, $link)) {
97: if (1366 == mysql_errno($link)) {
98: /* Strict SQL mode - 1366, Incorrect integer value: 'true' for column 'label' at row 1 */
99: continue;
100: }
101: printf("[009/%s] [%d] %s\n", $type_name, mysql_errno($link), mysql_error($link));
102: continue;
103: }
104: if (!$res = mysql_query("SELECT id, label FROM test", $link)) {
105: printf("[010/%s] [%d] %s\n", $type_name, mysql_errno($link), mysql_error($link));
106: continue;
107: }
108: if (!$tmp = mysql_fetch_field($res, 1)) {
109: printf("[011/%s] [%d] %s\n", $type_name, mysql_errno($link), mysql_error($link));
110: }
111:
112: if ($type_desc[1] != $tmp->type) {
113: printf("[012/%s] Expecting type '%s' got '%s'\n", $type_name, $type_desc[1], $tmp->type);
114: }
115: mysql_free_result($res);
116: }
117:
118: if (!mysql_query("DROP TABLE IF EXISTS test", $link))
119: printf("[013] [%d] %s\n", mysql_errno($link), mysql_error($link));
120:
121: if (!mysql_query("CREATE TABLE test(id INT DEFAULT 1)"))
122: printf("[014] [%d] %s\n", mysql_errno($link), mysql_error($link));
123:
124: if (!mysql_query("INSERT INTO test(id) VALUES (2)"))
125: printf("[015] [%d] %s\n", mysql_errno($link), mysql_error($link));
126:
127: if (!$res = mysql_query("SELECT id FROM test", $link)) {
128: printf("[016] [%d] %s\n", mysql_errno($link), mysql_error($link));
129: }
130:
131: var_dump(mysql_fetch_field($res));
132: mysql_free_result($res);
133:
134: if (!$res = mysql_query("SELECT id FROM test", $link)) {
135: printf("[017] [%d] %s\n", mysql_errno($link), mysql_error($link));
136: }
137: $res = mysql_list_fields($db, 'test');
138: $found = false;
139: while ($tmp = mysql_fetch_field($res)) {
140: if ($tmp->name == 'id') {
141: printf("Fetch field from mysql_list_fields result set.\n");
142: $found = true;
143: var_dump($tmp);
144: }
145: }
146: if (!$found)
147: printf("[018] mysqli_list_fields result set processing has failed.\n");
148:
149: mysql_free_result($res);
150:
151: mysql_close($link);
152: print "done!";
153: ?>
154: --CLEAN--
155: <?php
156: require_once("clean_table.inc");
157: ?>
158: --EXPECTF--
159: object(stdClass)#%d (13) {
160: [%u|b%"name"]=>
161: %unicode|string%(2) "ID"
162: [%u|b%"table"]=>
163: %unicode|string%(4) "TEST"
164: [%u|b%"def"]=>
165: %unicode|string%(0) ""
166: [%u|b%"max_length"]=>
167: int(1)
168: [%u|b%"not_null"]=>
169: int(1)
170: [%u|b%"primary_key"]=>
171: int(1)
172: [%u|b%"multiple_key"]=>
173: int(0)
174: [%u|b%"unique_key"]=>
175: int(0)
176: [%u|b%"numeric"]=>
177: int(1)
178: [%u|b%"blob"]=>
179: int(0)
180: [%u|b%"type"]=>
181: %unicode|string%(3) "int"
182: [%u|b%"unsigned"]=>
183: int(0)
184: [%u|b%"zerofill"]=>
185: int(0)
186: }
187: object(stdClass)#%d (13) {
188: [%u|b%"name"]=>
189: %unicode|string%(5) "label"
190: [%u|b%"table"]=>
191: %unicode|string%(4) "TEST"
192: [%u|b%"def"]=>
193: %unicode|string%(0) ""
194: [%u|b%"max_length"]=>
195: int(1)
196: [%u|b%"not_null"]=>
197: int(0)
198: [%u|b%"primary_key"]=>
199: int(0)
200: [%u|b%"multiple_key"]=>
201: int(0)
202: [%u|b%"unique_key"]=>
203: int(0)
204: [%u|b%"numeric"]=>
205: int(0)
206: [%u|b%"blob"]=>
207: int(0)
208: [%u|b%"type"]=>
209: %unicode|string%(6) "string"
210: [%u|b%"unsigned"]=>
211: int(0)
212: [%u|b%"zerofill"]=>
213: int(0)
214: }
215: bool(false)
216:
217: Warning: mysql_fetch_field(): Bad field offset in %s on line %d
218:
219: Warning: mysql_fetch_field(): %d is not a valid MySQL result resource in %s on line %d
220: object(stdClass)#%d (13) {
221: [%u|b%"name"]=>
222: %unicode|string%(2) "id"
223: [%u|b%"table"]=>
224: %unicode|string%(4) "test"
225: [%u|b%"def"]=>
226: %unicode|string%(0) ""
227: [%u|b%"max_length"]=>
228: int(1)
229: [%u|b%"not_null"]=>
230: int(0)
231: [%u|b%"primary_key"]=>
232: int(0)
233: [%u|b%"multiple_key"]=>
234: int(0)
235: [%u|b%"unique_key"]=>
236: int(0)
237: [%u|b%"numeric"]=>
238: int(1)
239: [%u|b%"blob"]=>
240: int(0)
241: [%u|b%"type"]=>
242: %unicode|string%(3) "int"
243: [%u|b%"unsigned"]=>
244: int(0)
245: [%u|b%"zerofill"]=>
246: int(0)
247: }
248: Fetch field from mysql_list_fields result set.
249: object(stdClass)#%d (13) {
250: [%u|b%"name"]=>
251: %unicode|string%(2) "id"
252: [%u|b%"table"]=>
253: %unicode|string%(4) "test"
254: [%u|b%"def"]=>
255: %unicode|string%(1) "1"
256: [%u|b%"max_length"]=>
257: int(0)
258: [%u|b%"not_null"]=>
259: int(0)
260: [%u|b%"primary_key"]=>
261: int(0)
262: [%u|b%"multiple_key"]=>
263: int(0)
264: [%u|b%"unique_key"]=>
265: int(0)
266: [%u|b%"numeric"]=>
267: int(1)
268: [%u|b%"blob"]=>
269: int(0)
270: [%u|b%"type"]=>
271: %unicode|string%(3) "int"
272: [%u|b%"unsigned"]=>
273: int(0)
274: [%u|b%"zerofill"]=>
275: int(0)
276: }
277: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>