home *** CD-ROM | disk | FTP | other *** search
/ Enter 2004 June / ENTER.ISO / files / xampp-win32-1.4.5-installer.exe / xampp / adodb-error.inc.php < prev    next >
Encoding:
PHP Script  |  2004-03-20  |  8.3 KB  |  253 lines

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