Annotation of embedaddon/php/ext/pdo_mysql/tests/pdo_mysql_errorinfo.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: MySQL PDO->errorInfo()
3: --SKIPIF--
4: <?php
5: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
6: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
7: MySQLPDOTest::skip();
8: $db = MySQLPDOTest::factory();
9: ?>
10: --FILE--
11: <?php
12: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
13: $db = MySQLPDOTest::factory();
14: MySQLPDOTest::createTestTable($db);
15:
16: function check_error($offset, &$obj, $expected = '00000') {
17: $info = $obj->errorInfo();
18: $code = $info[0];
19:
20: if (($code != $expected) && (($expected != '00000') && ($code != ''))) {
21: printf("[%03d] Expecting error code '%s' got code '%s'\n",
22: $offset, $expected, $code);
23: }
24:
25: if ($expected != '00000') {
26: if (!isset($info[1]) || $info[1] == '')
27: printf("[%03d] Driver-specific error code not set\n", $offset);
28: if (!isset($info[2]) || $info[2] == '')
29: printf("[%03d] Driver-specific error message.not set\n", $offset);
30: }
31:
32: }
33:
34: function pdo_mysql_errorinfo($db, $offset) {
35:
36: try {
37:
38: /*
39: If you create a PDOStatement object through PDO->prepare()
40: or PDO->query() and invoke an error on the statement handle,
41: PDO->errorCode() will not reflect that error. You must call
42: PDOStatement->errorCode() to return the error code for an
43: operation performed on a particular statement handle.
44: */
45: $code = $db->errorCode();
46: check_error($offset + 2, $db);
47:
48: $stmt = $db->query('SELECT id, label FROM test');
49: $stmt2 = &$stmt;
50: check_error($offset + 3, $db);
51: check_error($offset + 4, $stmt);
52:
53: $db->exec('DROP TABLE IF EXISTS test');
54: @$stmt->execute();
55: check_error($offset + 5, $db);
56: check_error($offset + 6, $stmt, '42S02');
57: check_error($offset + 7, $stmt2, '42S02');
58:
59: @$stmt = $db->query('SELECT id, label FROM unknown');
60: check_error($offset + 8, $db, '42S02');
61:
62: MySQLPDOTest::createTestTable($db);
63: $stmt = $db->query('SELECT id, label FROM test');
64: check_error($offset + 9, $db);
65: check_error($offset + 10, $stmt);
66:
67: $db2 = &$db;
68: $db->exec('DROP TABLE IF EXISTS unknown');
69: @$db->query('SELECT id, label FROM unknown');
70: check_error($offset + 11, $db, '42S02');
71: check_error($offset + 12, $db2, '42S02');
72: check_error($offset + 13, $stmt);
73: check_error($offset + 14, $stmt2);
74:
75: // lets hope this is an invalid attribute code
76: $invalid_attr = -1 * PHP_INT_MAX + 3;
77: $tmp = @$db->getAttribute($invalid_attr);
78: check_error($offset + 15, $db, 'IM001');
79: check_error($offset + 16, $db2, 'IM001');
80: check_error($offset + 17, $stmt);
81: check_error($offset + 18, $stmt2);
82:
83: } catch (PDOException $e) {
84: printf("[%03d] %s [%s] %s\n",
85: $offset + 19, $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
86: }
87: }
88:
89: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
90: printf("Emulated Prepared Statements...\n");
91: pdo_mysql_errorinfo($db, 0);
92:
93: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
94: printf("Native Prepared Statements...\n");
95: pdo_mysql_errorinfo($db, 20);
96:
97: print "done!";
98: ?>
99: --CLEAN--
100: <?php
101: require dirname(__FILE__) . '/mysql_pdo_test.inc';
102: MySQLPDOTest::dropTestTable();
103: ?>
104: --EXPECTF--
105: Emulated Prepared Statements...
106: [015] Driver-specific error code not set
107: [015] Driver-specific error message.not set
108: [016] Driver-specific error code not set
109: [016] Driver-specific error message.not set
110: Native Prepared Statements...
111: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>