home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2005 June / PCpro_2005_06.ISO / files / opensource / xamp / xampp-win32.exe / xampp / errors.inc < prev    next >
Encoding:
Text File  |  2004-10-01  |  4.9 KB  |  158 lines

  1. <?php
  2.  
  3. function errhandler($obj)
  4. {
  5.     if ($obj->getCode() == DB_ERROR) {
  6.         print '  unknown: ' . $obj->getUserInfo()."\n";
  7.     } else {
  8.         $msg = $obj->getMessage();
  9.         print "  $msg";
  10.         if (substr($msg, -1) != "\n") {
  11.             print "\n";
  12.         }
  13.     }
  14. }
  15.  
  16. $dbh->setErrorHandling(PEAR_ERROR_CALLBACK, "errhandler");
  17.  
  18.  
  19. print "Trying to provoke DB_ERROR_NOSUCHTABLE\n";
  20. $dbh->query('SELECT * FROM tableThatsBogus');
  21.  
  22. print "Trying to provoke DB_ERROR_ALREADY_EXISTS for create table\n";
  23. $dbh->query($test_mktable_query);
  24.  
  25. print "Trying to provoke DB_ERROR_NOSUCHTABLE\n";
  26. $dbh->query('DROP TABLE tableThatsBogus');
  27.  
  28.  
  29. print "Trying to provoke DB_ERROR_CONSTRAINT for primary key insert duplicate\n";
  30. $dbh->setErrorHandling(PEAR_ERROR_RETURN);
  31. $dbh->query('DROP TABLE a');
  32. $dbh->setErrorHandling(PEAR_ERROR_CALLBACK, 'errhandler');
  33. $dbh->query('CREATE TABLE a (a INTEGER NOT NULL, PRIMARY KEY (a))');
  34. $dbh->query('INSERT INTO a VALUES (1)');
  35. $dbh->query('INSERT INTO a VALUES (1)');
  36.  
  37. print "Trying to provoke DB_ERROR_CONSTRAINT for primary key update duplicate\n";
  38. $dbh->query('INSERT INTO a VALUES (2)');
  39. $dbh->query('UPDATE a SET a=1 WHERE a=2');
  40.  
  41.  
  42. print "Trying to provoke DB_ERROR_CONSTRAINT for unique key insert duplicate\n";
  43. $dbh->setErrorHandling(PEAR_ERROR_RETURN);
  44. $dbh->query('DROP TABLE a');
  45. $dbh->setErrorHandling(PEAR_ERROR_CALLBACK, 'errhandler');
  46. $dbh->query('CREATE TABLE a (a INTEGER NOT NULL, UNIQUE (a))');
  47. $dbh->query('INSERT INTO a VALUES (1)');
  48. $dbh->query('INSERT INTO a VALUES (1)');
  49.  
  50. print "Trying to provoke DB_ERROR_CONSTRAINT for unique key update duplicate\n";
  51. $dbh->query('INSERT INTO a VALUES (2)');
  52. $dbh->query('UPDATE a SET a=1 WHERE a=2');
  53.  
  54.  
  55. print "Trying to provoke DB_ERROR_CONSTRAINT for foreign key on insert\n";
  56. $dbh->setErrorHandling(PEAR_ERROR_RETURN);
  57. $dbh->query('DROP TABLE b');
  58. $dbh->query('DROP TABLE a');
  59. $dbh->setErrorHandling(PEAR_ERROR_CALLBACK, 'errhandler');
  60. switch ($dbh->phptype) {
  61.     case 'mysql':
  62.     case 'mysqli':
  63.         $dbh->query('CREATE TABLE a (a INT NOT NULL, '
  64.                     . 'PRIMARY KEY (a)) '
  65.                     . 'TYPE=INNODB');
  66.         $dbh->query('CREATE TABLE b (b INT, '
  67.                     . 'INDEX par_ind (b), '
  68.                     . 'FOREIGN KEY (b) REFERENCES a (a)) '
  69.                     . 'TYPE=INNODB');
  70.         break;
  71.     default:
  72.         $dbh->query('CREATE TABLE a (a INTEGER NOT NULL, PRIMARY KEY (a))');
  73.         $dbh->query('CREATE TABLE b (b INTEGER REFERENCES a (a))');
  74. }
  75. $dbh->query('INSERT INTO a (a) values (1)');
  76. $dbh->query('INSERT INTO b (b) values (2)');
  77. switch ($dbh->phptype) {
  78.     case 'sqlite':
  79.         print "            OK  $dbh->phptype doesn't consider this an error\n";
  80.         break;
  81. }
  82.  
  83. print "Trying to provoke DB_ERROR_CONSTRAINT for foreign key on delete\n";
  84. $dbh->query('INSERT INTO b (b) values (1)');
  85. $dbh->query('DELETE FROM a WHERE a = 1');
  86. switch ($dbh->phptype) {
  87.     case 'sqlite':
  88.         print "            OK  $dbh->phptype doesn't consider this an error\n";
  89.         break;
  90. }
  91.  
  92.  
  93. print "Trying to provoke DB_ERROR_CONSTRAINT_NOT_NULL on insert\n";
  94. $dbh->setErrorHandling(PEAR_ERROR_RETURN);
  95. $dbh->query('DROP TABLE peartestnull');
  96. $dbh->setErrorHandling(PEAR_ERROR_CALLBACK, 'errhandler');
  97. $dbh->query('CREATE TABLE peartestnull (a CHAR(3) NOT NULL)');
  98. $dbh->query('INSERT INTO peartestnull VALUES (NULL)');
  99.  
  100. print "Trying to provoke DB_ERROR_CONSTRAINT_NOT_NULL on update\n";
  101. $dbh->query("INSERT INTO peartestnull VALUES ('one')");
  102. $dbh->query("UPDATE peartestnull SET a = NULL WHERE a = 'one'");
  103. switch ($dbh->phptype) {
  104.     case 'mysql':
  105.     case 'mysqli':
  106.         print "            OK  $dbh->phptype doesn't consider this an error\n";
  107.         break;
  108. }
  109.  
  110.  
  111. print "Trying to provoke DB_ERROR_DIVZERO\n";
  112. // Interbase detects the error on fetching
  113. $dbh->getAll('SELECT 0/0 FROM phptest');
  114. switch ($dbh->phptype) {
  115.     case 'mssql':
  116.     case 'sybase':
  117.         print "            OK  PHP's $dbh->phptype extension doesn't report this error\n";
  118.         break;
  119.     case 'odbc':
  120.         switch ($dbh->dbsyntax) {
  121.             case 'access':
  122.                 print "            OK  odbc($dbh->dbsyntax) doesn't report this error\n";
  123.                 break;
  124.         }
  125.         break;
  126.     case 'ifx':
  127.     case 'mysql':
  128.     case 'mysqli':
  129.     case 'sqlite':
  130.         print "            OK  $dbh->phptype doesn't consider this an error\n";
  131.         break;
  132. }
  133.  
  134. print "Trying to provoke DB_ERROR_INVALID_NUMBER\n";
  135. $dbh->query("UPDATE phptest SET a = 'abc' WHERE a = 42");
  136. switch ($dbh->phptype) {
  137.     case 'mysql':
  138.     case 'mysqli':
  139.     case 'sqlite':
  140.         print "            OK  $dbh->phptype doesn't consider this an error\n";
  141.         break;
  142. }
  143.  
  144. print "Trying to provoke DB_ERROR_NOSUCHFIELD\n";
  145. $dbh->query('SELECT e FROM phptest');
  146.  
  147. print "Trying to provoke DB_ERROR_SYNTAX\n";
  148. $dbh->query('CREATE');
  149.  
  150.  
  151. $dbh->setErrorHandling(PEAR_ERROR_RETURN);
  152. $dbh->query('DROP TABLE phptest');
  153. $dbh->query('DROP TABLE b');
  154. $dbh->query('DROP TABLE a');
  155. $dbh->query('DROP TABLE peartestnull');
  156.  
  157. ?>
  158.