1 | <?php
|
---|
2 | /**
|
---|
3 | * @version V4.94 23 Jan 2007 (c) 2000-2007 John Lim (jlim#natsoft.com.my). All rights reserved.
|
---|
4 | * Released under both BSD license and Lesser GPL library license.
|
---|
5 | * Whenever there is any discrepancy between the two licenses,
|
---|
6 | * the BSD license will take precedence.
|
---|
7 | *
|
---|
8 | * Set tabs to 4 for best viewing.
|
---|
9 | *
|
---|
10 | * The following code is adapted from the PEAR DB error handling code.
|
---|
11 | * Portions (c)1997-2002 The PHP Group.
|
---|
12 | */
|
---|
13 |
|
---|
14 |
|
---|
15 | if (!defined("DB_ERROR")) define("DB_ERROR",-1);
|
---|
16 |
|
---|
17 | if (!defined("DB_ERROR_SYNTAX")) {
|
---|
18 | define("DB_ERROR_SYNTAX", -2);
|
---|
19 | define("DB_ERROR_CONSTRAINT", -3);
|
---|
20 | define("DB_ERROR_NOT_FOUND", -4);
|
---|
21 | define("DB_ERROR_ALREADY_EXISTS", -5);
|
---|
22 | define("DB_ERROR_UNSUPPORTED", -6);
|
---|
23 | define("DB_ERROR_MISMATCH", -7);
|
---|
24 | define("DB_ERROR_INVALID", -8);
|
---|
25 | define("DB_ERROR_NOT_CAPABLE", -9);
|
---|
26 | define("DB_ERROR_TRUNCATED", -10);
|
---|
27 | define("DB_ERROR_INVALID_NUMBER", -11);
|
---|
28 | define("DB_ERROR_INVALID_DATE", -12);
|
---|
29 | define("DB_ERROR_DIVZERO", -13);
|
---|
30 | define("DB_ERROR_NODBSELECTED", -14);
|
---|
31 | define("DB_ERROR_CANNOT_CREATE", -15);
|
---|
32 | define("DB_ERROR_CANNOT_DELETE", -16);
|
---|
33 | define("DB_ERROR_CANNOT_DROP", -17);
|
---|
34 | define("DB_ERROR_NOSUCHTABLE", -18);
|
---|
35 | define("DB_ERROR_NOSUCHFIELD", -19);
|
---|
36 | define("DB_ERROR_NEED_MORE_DATA", -20);
|
---|
37 | define("DB_ERROR_NOT_LOCKED", -21);
|
---|
38 | define("DB_ERROR_VALUE_COUNT_ON_ROW", -22);
|
---|
39 | define("DB_ERROR_INVALID_DSN", -23);
|
---|
40 | define("DB_ERROR_CONNECT_FAILED", -24);
|
---|
41 | define("DB_ERROR_EXTENSION_NOT_FOUND",-25);
|
---|
42 | define("DB_ERROR_NOSUCHDB", -25);
|
---|
43 | define("DB_ERROR_ACCESS_VIOLATION", -26);
|
---|
44 | }
|
---|
45 |
|
---|
46 | function adodb_errormsg($value)
|
---|
47 | {
|
---|
48 | global $ADODB_LANG,$ADODB_LANG_ARRAY;
|
---|
49 |
|
---|
50 | if (empty($ADODB_LANG)) $ADODB_LANG = 'en';
|
---|
51 | if (isset($ADODB_LANG_ARRAY['LANG']) && $ADODB_LANG_ARRAY['LANG'] == $ADODB_LANG) ;
|
---|
52 | else {
|
---|
53 | include_once(ADODB_DIR."/lang/adodb-$ADODB_LANG.inc.php");
|
---|
54 | }
|
---|
55 | return isset($ADODB_LANG_ARRAY[$value]) ? $ADODB_LANG_ARRAY[$value] : $ADODB_LANG_ARRAY[DB_ERROR];
|
---|
56 | }
|
---|
57 |
|
---|
58 | function adodb_error($provider,$dbType,$errno)
|
---|
59 | {
|
---|
60 | //var_dump($errno);
|
---|
61 | if (is_numeric($errno) && $errno == 0) return 0;
|
---|
62 | switch($provider) {
|
---|
63 | case 'mysql': $map = adodb_error_mysql(); break;
|
---|
64 |
|
---|
65 | case 'oracle':
|
---|
66 | case 'oci8': $map = adodb_error_oci8(); break;
|
---|
67 |
|
---|
68 | case 'ibase': $map = adodb_error_ibase(); break;
|
---|
69 |
|
---|
70 | case 'odbc': $map = adodb_error_odbc(); break;
|
---|
71 |
|
---|
72 | case 'mssql':
|
---|
73 | case 'sybase': $map = adodb_error_mssql(); break;
|
---|
74 |
|
---|
75 | case 'informix': $map = adodb_error_ifx(); break;
|
---|
76 |
|
---|
77 | case 'postgres': return adodb_error_pg($errno); break;
|
---|
78 |
|
---|
79 | case 'sqlite': return $map = adodb_error_sqlite(); break;
|
---|
80 | default:
|
---|
81 | return DB_ERROR;
|
---|
82 | }
|
---|
83 | //print_r($map);
|
---|
84 | //var_dump($errno);
|
---|
85 | if (isset($map[$errno])) return $map[$errno];
|
---|
86 | return DB_ERROR;
|
---|
87 | }
|
---|
88 |
|
---|
89 | //**************************************************************************************
|
---|
90 |
|
---|
91 | function adodb_error_pg($errormsg)
|
---|
92 | {
|
---|
93 | if (is_numeric($errormsg)) return (integer) $errormsg;
|
---|
94 | static $error_regexps = array(
|
---|
95 | '/(Table does not exist\.|Relation [\"\'].*[\"\'] does not exist|sequence does not exist|class ".+" not found)$/' => DB_ERROR_NOSUCHTABLE,
|
---|
96 | '/Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*/' => DB_ERROR_ALREADY_EXISTS,
|
---|
97 | '/divide by zero$/' => DB_ERROR_DIVZERO,
|
---|
98 | '/pg_atoi: error in .*: can\'t parse /' => DB_ERROR_INVALID_NUMBER,
|
---|
99 | '/ttribute [\"\'].*[\"\'] not found|Relation [\"\'].*[\"\'] does not have attribute [\"\'].*[\"\']/' => DB_ERROR_NOSUCHFIELD,
|
---|
100 | '/parser: parse error at or near \"/' => DB_ERROR_SYNTAX,
|
---|
101 | '/referential integrity violation/' => DB_ERROR_CONSTRAINT,
|
---|
102 | '/Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*|duplicate key violates unique constraint/'
|
---|
103 | => DB_ERROR_ALREADY_EXISTS
|
---|
104 | );
|
---|
105 | reset($error_regexps);
|
---|
106 | while (list($regexp,$code) = each($error_regexps)) {
|
---|
107 | if (preg_match($regexp, $errormsg)) {
|
---|
108 | return $code;
|
---|
109 | }
|
---|
110 | }
|
---|
111 | // Fall back to DB_ERROR if there was no mapping.
|
---|
112 | return DB_ERROR;
|
---|
113 | }
|
---|
114 |
|
---|
115 | function adodb_error_odbc()
|
---|
116 | {
|
---|
117 | static $MAP = array(
|
---|
118 | '01004' => DB_ERROR_TRUNCATED,
|
---|
119 | '07001' => DB_ERROR_MISMATCH,
|
---|
120 | '21S01' => DB_ERROR_MISMATCH,
|
---|
121 | '21S02' => DB_ERROR_MISMATCH,
|
---|
122 | '22003' => DB_ERROR_INVALID_NUMBER,
|
---|
123 | '22008' => DB_ERROR_INVALID_DATE,
|
---|
124 | '22012' => DB_ERROR_DIVZERO,
|
---|
125 | '23000' => DB_ERROR_CONSTRAINT,
|
---|
126 | '24000' => DB_ERROR_INVALID,
|
---|
127 | '34000' => DB_ERROR_INVALID,
|
---|
128 | '37000' => DB_ERROR_SYNTAX,
|
---|
129 | '42000' => DB_ERROR_SYNTAX,
|
---|
130 | 'IM001' => DB_ERROR_UNSUPPORTED,
|
---|
131 | 'S0000' => DB_ERROR_NOSUCHTABLE,
|
---|
132 | 'S0001' => DB_ERROR_NOT_FOUND,
|
---|
133 | 'S0002' => DB_ERROR_NOSUCHTABLE,
|
---|
134 | 'S0011' => DB_ERROR_ALREADY_EXISTS,
|
---|
135 | 'S0012' => DB_ERROR_NOT_FOUND,
|
---|
136 | 'S0021' => DB_ERROR_ALREADY_EXISTS,
|
---|
137 | 'S0022' => DB_ERROR_NOT_FOUND,
|
---|
138 | 'S1000' => DB_ERROR_NOSUCHTABLE,
|
---|
139 | 'S1009' => DB_ERROR_INVALID,
|
---|
140 | 'S1090' => DB_ERROR_INVALID,
|
---|
141 | 'S1C00' => DB_ERROR_NOT_CAPABLE
|
---|
142 | );
|
---|
143 | return $MAP;
|
---|
144 | }
|
---|
145 |
|
---|
146 | function adodb_error_ibase()
|
---|
147 | {
|
---|
148 | static $MAP = array(
|
---|
149 | -104 => DB_ERROR_SYNTAX,
|
---|
150 | -150 => DB_ERROR_ACCESS_VIOLATION,
|
---|
151 | -151 => DB_ERROR_ACCESS_VIOLATION,
|
---|
152 | -155 => DB_ERROR_NOSUCHTABLE,
|
---|
153 | -157 => DB_ERROR_NOSUCHFIELD,
|
---|
154 | -158 => DB_ERROR_VALUE_COUNT_ON_ROW,
|
---|
155 | -170 => DB_ERROR_MISMATCH,
|
---|
156 | -171 => DB_ERROR_MISMATCH,
|
---|
157 | -172 => DB_ERROR_INVALID,
|
---|
158 | -204 => DB_ERROR_INVALID,
|
---|
159 | -205 => DB_ERROR_NOSUCHFIELD,
|
---|
160 | -206 => DB_ERROR_NOSUCHFIELD,
|
---|
161 | -208 => DB_ERROR_INVALID,
|
---|
162 | -219 => DB_ERROR_NOSUCHTABLE,
|
---|
163 | -297 => DB_ERROR_CONSTRAINT,
|
---|
164 | -530 => DB_ERROR_CONSTRAINT,
|
---|
165 | -803 => DB_ERROR_CONSTRAINT,
|
---|
166 | -551 => DB_ERROR_ACCESS_VIOLATION,
|
---|
167 | -552 => DB_ERROR_ACCESS_VIOLATION,
|
---|
168 | -922 => DB_ERROR_NOSUCHDB,
|
---|
169 | -923 => DB_ERROR_CONNECT_FAILED,
|
---|
170 | -924 => DB_ERROR_CONNECT_FAILED
|
---|
171 | );
|
---|
172 |
|
---|
173 | return $MAP;
|
---|
174 | }
|
---|
175 |
|
---|
176 | function adodb_error_ifx()
|
---|
177 | {
|
---|
178 | static $MAP = array(
|
---|
179 | '-201' => DB_ERROR_SYNTAX,
|
---|
180 | '-206' => DB_ERROR_NOSUCHTABLE,
|
---|
181 | '-217' => DB_ERROR_NOSUCHFIELD,
|
---|
182 | '-329' => DB_ERROR_NODBSELECTED,
|
---|
183 | '-1204' => DB_ERROR_INVALID_DATE,
|
---|
184 | '-1205' => DB_ERROR_INVALID_DATE,
|
---|
185 | '-1206' => DB_ERROR_INVALID_DATE,
|
---|
186 | '-1209' => DB_ERROR_INVALID_DATE,
|
---|
187 | '-1210' => DB_ERROR_INVALID_DATE,
|
---|
188 | '-1212' => DB_ERROR_INVALID_DATE
|
---|
189 | );
|
---|
190 |
|
---|
191 | return $MAP;
|
---|
192 | }
|
---|
193 |
|
---|
194 | function adodb_error_oci8()
|
---|
195 | {
|
---|
196 | static $MAP = array(
|
---|
197 | 1 => DB_ERROR_ALREADY_EXISTS,
|
---|
198 | 900 => DB_ERROR_SYNTAX,
|
---|
199 | 904 => DB_ERROR_NOSUCHFIELD,
|
---|
200 | 923 => DB_ERROR_SYNTAX,
|
---|
201 | 942 => DB_ERROR_NOSUCHTABLE,
|
---|
202 | 955 => DB_ERROR_ALREADY_EXISTS,
|
---|
203 | 1476 => DB_ERROR_DIVZERO,
|
---|
204 | 1722 => DB_ERROR_INVALID_NUMBER,
|
---|
205 | 2289 => DB_ERROR_NOSUCHTABLE,
|
---|
206 | 2291 => DB_ERROR_CONSTRAINT,
|
---|
207 | 2449 => DB_ERROR_CONSTRAINT
|
---|
208 | );
|
---|
209 |
|
---|
210 | return $MAP;
|
---|
211 | }
|
---|
212 |
|
---|
213 | function adodb_error_mssql()
|
---|
214 | {
|
---|
215 | static $MAP = array(
|
---|
216 | 208 => DB_ERROR_NOSUCHTABLE,
|
---|
217 | 2601 => DB_ERROR_ALREADY_EXISTS
|
---|
218 | );
|
---|
219 |
|
---|
220 | return $MAP;
|
---|
221 | }
|
---|
222 |
|
---|
223 | function adodb_error_sqlite()
|
---|
224 | {
|
---|
225 | static $MAP = array(
|
---|
226 | 1 => DB_ERROR_SYNTAX
|
---|
227 | );
|
---|
228 |
|
---|
229 | return $MAP;
|
---|
230 | }
|
---|
231 |
|
---|
232 | function adodb_error_mysql()
|
---|
233 | {
|
---|
234 | static $MAP = array(
|
---|
235 | 1004 => DB_ERROR_CANNOT_CREATE,
|
---|
236 | 1005 => DB_ERROR_CANNOT_CREATE,
|
---|
237 | 1006 => DB_ERROR_CANNOT_CREATE,
|
---|
238 | 1007 => DB_ERROR_ALREADY_EXISTS,
|
---|
239 | 1008 => DB_ERROR_CANNOT_DROP,
|
---|
240 | 1045 => DB_ERROR_ACCESS_VIOLATION,
|
---|
241 | 1046 => DB_ERROR_NODBSELECTED,
|
---|
242 | 1049 => DB_ERROR_NOSUCHDB,
|
---|
243 | 1050 => DB_ERROR_ALREADY_EXISTS,
|
---|
244 | 1051 => DB_ERROR_NOSUCHTABLE,
|
---|
245 | 1054 => DB_ERROR_NOSUCHFIELD,
|
---|
246 | 1062 => DB_ERROR_ALREADY_EXISTS,
|
---|
247 | 1064 => DB_ERROR_SYNTAX,
|
---|
248 | 1100 => DB_ERROR_NOT_LOCKED,
|
---|
249 | 1136 => DB_ERROR_VALUE_COUNT_ON_ROW,
|
---|
250 | 1146 => DB_ERROR_NOSUCHTABLE,
|
---|
251 | 1048 => DB_ERROR_CONSTRAINT,
|
---|
252 | 2002 => DB_ERROR_CONNECT_FAILED,
|
---|
253 | 2005 => DB_ERROR_CONNECT_FAILED
|
---|
254 | );
|
---|
255 |
|
---|
256 | return $MAP;
|
---|
257 | }
|
---|
258 | ?> |
---|