[ Index ] |
|
Code source de SPIP Agora 1.4 |
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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sat Feb 24 14:40:03 2007 | par Balluche grâce à PHPXref 0.7 |