Annotation of embedaddon/php/ext/pdo_mysql/tests/pdo_mysql_attr_errmode.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: PDO::ATTR_ERRMODE
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: --INI--
11: error_reporting=E_ALL
12: --FILE--
13: <?php
14: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
15: $db = MySQLPDOTest::factory();
16:
17: $valid = array(PDO::ERRMODE_SILENT, PDO::ERRMODE_WARNING, PDO::ERRMODE_EXCEPTION);
18: do {
19: $invalid = mt_rand(-1000, 1000);
20: } while (in_array($invalid, $valid));
21:
22:
23: $tmp = array();
24: if (false != @$db->setAttribute(PDO::ATTR_ERRMODE, $tmp))
25: printf("[001] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...\n");
26:
27: $tmp = new stdClass();
28: $ret = @$db->setAttribute(PDO::ATTR_ERRMODE, $tmp);
29: if (false != $ret)
30: printf("[002] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...%s\n",
31: var_export($ret, true));
32:
33: $ret = @$db->setAttribute(PDO::ATTR_ERRMODE, 'pdo');
34: if (false != $ret)
35: printf("[003] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...%s\n",
36: var_export($ret, true));
37:
38: if (false != @$db->setAttribute(PDO::ATTR_ERRMODE, $invalid))
39: printf("[004] Invalid ERRMODE should be rejected\n");
40:
41: $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
42: // no message for any PDO call but...
43: $db->query('THIS IS NOT VALID SQL');
44: // ... still messages for everything else
45: $code = $db->errorCode();
46: $info = $db->errorInfo();
47:
48: if ($code != '42000')
49: printf("[005] Expecting SQL code 42000 got '%s'\n", $code);
50: if ($code !== $info[0])
51: printf("[006] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n",
52: $code, $info[0]);
53: if ('' == $info[1])
54: printf("[007] Driver specific error code not set\n");
55: if ('' == $info[2])
56: printf("[008] Driver specific error message not set\n");
57:
58: $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
59: $db->query('THIS IS NOT VALID SQL');
60:
61: $code = $db->errorCode();
62: $info = $db->errorInfo();
63:
64: if ($code != '42000')
65: printf("[009] Expecting SQL code 42000 got '%s'\n", $code);
66: if ($code !== $info[0])
67: printf("[010] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n",
68: $code, $info[0]);
69: if ('' == $info[1])
70: printf("[011] Driver specific error code not set\n");
71: if ('' == $info[2])
72: printf("[012] Driver specific error message not set\n");
73:
74: $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
75: try {
76: $line = __LINE__ + 1;
77: $db->query('THIS IS NOT VALID SQL');
78: } catch (PDOException $e) {
79:
80: $code = $db->errorCode();
81: $info = $db->errorInfo();
82:
83: if ($code != '42000')
84: printf("[013] Expecting SQL code 42000 got '%s'\n", $code);
85: if ($code !== $info[0])
86: printf("[014] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n",
87: $code, $info[0]);
88: if ('' == $info[1])
89: printf("[015] Driver specific error code not set\n");
90: if ('' == $info[2])
91: printf("[016] Driver specific error message not set\n");
92:
93: if ($e->getCode() !== $code)
94: printf("[017] Exception code '%s' differs from errorCode '%s'\n",
95: $e->getCode(), $code);
96:
97: $msg = $e->getMessage();
98: foreach ($info as $k => $v) {
99: if (false === stristr($msg, (string)$v)) {
100: printf("[018] Cannot find all parts of the error info ('%s') in the exception message '%s'\n",
101: $v, $msg);
102: }
103: }
104:
105: if ($e->getLine() !== $line)
106: printf("[019] Exception has been thrown in line %d, exception object reports line %d\n",
107: $line, $e->getLine());
108:
109: if ($e->getFile() !== __FILE__)
110: printf("[020] Exception has been thrown in file '%s', exception object reports file '%s'\n",
111: __FILE__, $e->getFile());
112:
113: }
114:
115: function my_handler($e) {
116: global $db, $line;
117:
118: $code = $db->errorCode();
119: $info = $db->errorInfo();
120:
121: if ($code != '42000')
122: printf("[021] Expecting SQL code 42000 got '%s'\n", $code);
123: if ($code !== $info[0])
124: printf("[022] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n",
125: $code, $info[0]);
126: if ('' == $info[1])
127: printf("[023] Driver specific error code not set\n");
128: if ('' == $info[2])
129: printf("[024] Driver specific error message not set\n");
130:
131: if ($e->getCode() !== $code)
132: printf("[025] Exception code '%s' differs from errorCode '%s'\n",
133: $e->getCode(), $code);
134:
135: $msg = $e->getMessage();
136: foreach ($info as $k => $v) {
137: if (false === stristr($msg, (string)$v)) {
138: printf("[026] Cannot find all parts of the error info ('%s') in the exception message '%s'\n",
139: $v, $msg);
140: }
141: }
142:
143: if ($e->getLine() !== $line)
144: printf("[027] Exception has been thrown in line %d, exception object reports line %d\n",
145: $line, $e->getLine());
146:
147: if ($e->getFile() !== __FILE__)
148: printf("[028] Exception has been thrown in file '%s', exception object reports file '%s'\n",
149: __FILE__, $e->getFile());
150:
151: if (get_class($e) != 'PDOException')
152: printf("[029] Expecting PDO exception got exception of type '%s'\n", get_class($e));
153:
154: print "\nend of execution";
155: }
156: set_exception_handler('my_handler');
157: $line = __LINE__ + 1;
158: $db->query('THIS IS NOT VALID SQL');
159:
160: print "done!\n";
161: --EXPECTF--
162: [003] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...true
163:
164: Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: %d You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line %d in %s on line %d
165:
166: end of execution
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>