|
Adodb Dokumentation
V5.14 8 Sept 2011
|
00001 <?php 00002 /* 00003 V4.80 8 Mar 2006 (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved. 00004 Released under both BSD license and Lesser GPL library license. 00005 Whenever there is any discrepancy between the two licenses, 00006 the BSD license will take precedence. 00007 Set tabs to 4 for best viewing. 00008 00009 Latest version is available at http://adodb.sourceforge.net 00010 */ 00011 00012 00013 //if (!defined('E_STRICT')) define('E_STRICT',0); 00014 error_reporting(E_ALL|E_STRICT); 00015 00016 $ADODB_FLUSH = true; 00017 00018 define('ADODB_ASSOC_CASE',0); 00019 00020 00021 function getmicrotime() 00022 { 00023 $t = microtime(); 00024 $t = explode(' ',$t); 00025 return (float)$t[1]+ (float)$t[0]; 00026 } 00027 00028 00029 if (PHP_VERSION < 5) include_once('../adodb-pear.inc.php'); 00030 //-------------------------------------------------------------------------------------- 00031 //define('ADODB_ASSOC_CASE',1); 00032 // 00033 function Err($msg) 00034 { 00035 print "<b>$msg</b><br>"; 00036 flush(); 00037 } 00038 00039 function CheckWS($conn) 00040 { 00041 global $ADODB_EXTENSION; 00042 00043 include_once('../session/adodb-session.php'); 00044 if (defined('CHECKWSFAIL')){ echo " TESTING $conn ";flush();} 00045 $saved = $ADODB_EXTENSION; 00046 $db = ADONewConnection($conn); 00047 $ADODB_EXTENSION = $saved; 00048 if (headers_sent()) { 00049 print "<p><b>White space detected in adodb-$conn.inc.php or include file...</b></p>"; 00050 //die(); 00051 } 00052 } 00053 00054 function do_strtolower(&$arr) 00055 { 00056 foreach($arr as $k => $v) { 00057 if (is_object($v)) $arr[$k] = adodb_pr($v,true); 00058 else $arr[$k] = strtolower($v); 00059 } 00060 } 00061 00062 00063 function CountExecs($db, $sql, $inputarray) 00064 { 00065 global $EXECS; $EXECS++; 00066 } 00067 00068 function CountCachedExecs($db, $secs2cache, $sql, $inputarray) 00069 { 00070 global $CACHED; $CACHED++; 00071 } 00072 00073 // the table creation code is specific to the database, so we allow the user 00074 // to define their own table creation stuff 00075 00076 function testdb(&$db,$createtab="create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)") 00077 { 00078 GLOBAL $ADODB_vers,$ADODB_CACHE_DIR,$ADODB_FETCH_MODE,$ADODB_COUNTRECS; 00079 00080 //adodb_pr($db); 00081 00082 ?> <form method=GET> 00083 </p> 00084 <table width=100% ><tr><td bgcolor=beige> </td></tr></table> 00085 </p> 00086 <?php 00087 $create =false; 00088 /*$ADODB_FETCH_MODE = ADODB_FETCH_NUM; 00089 00090 $rs = $db->Execute('select lastname,firstname,lastname,id from ADOXYZ'); 00091 $arr = $rs->GetAssoc(); 00092 echo "<pre>";print_r($arr); 00093 die();*/ 00094 00095 if (!$db) die("testdb: database not inited"); 00096 GLOBAL $EXECS, $CACHED; 00097 00098 $EXECS = 0; 00099 $CACHED = 0; 00100 //$db->Execute("drop table adodb_logsql"); 00101 if ((rand()%3) == 0) @$db->Execute("delete from adodb_logsql"); 00102 $db->debug=1; 00103 00104 $db->fnExecute = 'CountExecs'; 00105 $db->fnCacheExecute = 'CountCachedExecs'; 00106 00107 if (empty($_GET['nolog'])) { 00108 echo "<h3>SQL Logging enabled</h3>"; 00109 $db->LogSQL();/* 00110 $sql = 00111 "SELECT t1.sid, t1.sid, t1.title, t1.hometext, t1.notes, t1.aid, t1.informant, 00112 t2.url, t2.email, t1.catid, t3.title, t1.topic, t4.topicname, t4.topicimage, 00113 t4.topictext, t1.score, t1.ratings, t1.counter, t1.comments, t1.acomm 00114 FROM `nuke_stories` `t1`, `nuke_authors` `t2`, `nuke_stories_cat` `t3`, `nuke_topics` `t4` 00115 WHERE ((t2.aid=t1.aid) AND (t3.catid=t1.catid) AND (t4.topicid=t1.topic) 00116 AND ((t1.alanguage='german') OR (t1.alanguage='')) AND (t1.ihome='0')) 00117 ORDER BY t1.time DESC"; 00118 $db->SelectLimit($sql); 00119 echo $db->ErrorMsg();*/ 00120 } 00121 $ADODB_CACHE_DIR = dirname(TempNam('/tmp','testadodb')); 00122 $db->debug = false; 00123 //print $db->UnixTimeStamp('2003-7-22 23:00:00'); 00124 00125 $phpv = phpversion(); 00126 if (defined('ADODB_EXTENSION')) $ext = ' Extension '.ADODB_EXTENSION.' installed'; 00127 else $ext = ''; 00128 print "<h3>ADODB Version: $ADODB_vers Host: <i>$db->host</i> Database: <i>$db->database</i> PHP: $phpv $ext</h3>"; 00129 00130 flush(); 00131 00132 if (function_exists('date_default_timezone_set')) date_default_timezone_set('Asia/Kuala_Lumpur'); 00133 00134 $arr = $db->ServerInfo(); 00135 print_r($arr); 00136 echo E_ALL,' ',E_STRICT, "<br>"; 00137 $e = error_reporting(E_ALL | E_STRICT); 00138 echo error_reporting(),'<p>'; 00139 flush(); 00140 #$db->debug=1; 00141 $tt = $db->Time(); 00142 if ($tt == 0) echo '<br><b>$db->Time failed</b>'; 00143 else echo "<br>db->Time: ".date('d-m-Y H:i:s',$tt); 00144 echo '<br>'; 00145 00146 echo "Date=",$db->UserDate('2002-04-07'),'<br>'; 00147 print "<i>date1</i> (1969-02-20) = ".$db->DBDate('1969-2-20'); 00148 print "<br><i>date1</i> (1999-02-20) = ".$db->DBDate('1999-2-20'); 00149 print "<br><i>date1.1</i> 1999 = ".$db->DBDate("'1999'"); 00150 print "<br><i>date2</i> (1970-1-2) = ".$db->DBDate(24*3600)."<p>"; 00151 print "<i>ts1</i> (1999-02-20 13:40:50) = ".$db->DBTimeStamp('1999-2-20 1:40:50 pm'); 00152 print "<br><i>ts1.1</i> (1999-02-20 13:40:00) = ".$db->DBTimeStamp('1999-2-20 13:40'); 00153 print "<br><i>ts2</i> (1999-02-20) = ".$db->DBTimeStamp('1999-2-20'); 00154 print "<br><i>ts3</i> (1970-1-2 +/- timezone) = ".$db->DBTimeStamp(24*3600); 00155 print "<br> Fractional TS (1999-2-20 13:40:50.91): ".$db->DBTimeStamp($db->UnixTimeStamp('1999-2-20 13:40:50.91+1')); 00156 $dd = $db->UnixDate('1999-02-20'); 00157 print "<br>unixdate</i> 1999-02-20 = ".date('Y-m-d',$dd)."<p>"; 00158 print "<br><i>ts4</i> =".($db->UnixTimeStamp("19700101000101")+8*3600); 00159 print "<br><i>ts5</i> =".$db->DBTimeStamp($db->UnixTimeStamp("20040110092123")); 00160 print "<br><i>ts6</i> =".$db->UserTimeStamp("20040110092123"); 00161 print "<br><i>ts7</i> =".$db->DBTimeStamp("20040110092123"); 00162 flush(); 00163 // mssql too slow in failing bad connection 00164 if (false && $db->databaseType != 'mssql') { 00165 print "<p>Testing bad connection. Ignore following error msgs:<br>"; 00166 $db2 = ADONewConnection(); 00167 $rez = $db2->Connect("bad connection"); 00168 $err = $db2->ErrorMsg(); 00169 print "<i>Error='$err'</i></p>"; 00170 if ($rez) print "<b>Cannot check if connection failed.</b> The Connect() function returned true.</p>"; 00171 } 00172 #error_reporting($e); 00173 flush(); 00174 00175 //$ADODB_COUNTRECS=false; 00176 $rs=$db->Execute('select * from ADOXYZ order by id'); 00177 if($rs === false) $create = true; 00178 else $rs->Close(); 00179 00180 //if ($db->databaseType !='vfp') $db->Execute("drop table ADOXYZ"); 00181 00182 if ($create) { 00183 if (false && $db->databaseType == 'ibase') { 00184 print "<b>Please create the following table for testing:</b></p>$createtab</p>"; 00185 return; 00186 } else { 00187 $db->debug = 99; 00188 # $e = error_reporting(E_ALL-E_WARNING); 00189 $db->Execute($createtab); 00190 # error_reporting($e); 00191 } 00192 } 00193 #error_reporting(E_ALL); 00194 echo "<p>Testing Metatypes</p>"; 00195 $t = $db->MetaType('varchar'); 00196 if ($t != 'C') Err("Bad Metatype for varchar"); 00197 00198 $rs = $db->Execute("delete from ADOXYZ"); // some ODBC drivers will fail the drop so we delete 00199 if ($rs) { 00200 if(! $rs->EOF) print "<b>Error: </b>RecordSet returned by Execute('delete...') should show EOF</p>"; 00201 $rs->Close(); 00202 } else print "err=".$db->ErrorMsg(); 00203 00204 print "<p>Test select on empty table, FetchField when EOF, and GetInsertSQL</p>"; 00205 $rs = $db->Execute("select id,firstname from ADOXYZ where id=9999"); 00206 if ($rs && !$rs->EOF) print "<b>Error: </b>RecordSet returned by Execute(select...') on empty table should show EOF</p>"; 00207 if ($rs->EOF && (($ox = $rs->FetchField(0)) && !empty($ox->name))) { 00208 $record['id'] = 99; 00209 $record['firstname'] = 'John'; 00210 $sql = $db->GetInsertSQL($rs, $record); 00211 if (strtoupper($sql) != strtoupper("INSERT INTO ADOXYZ ( id, firstname ) VALUES ( 99, 'John' )")) Err("GetInsertSQL does not work on empty table: $sql"); 00212 } else { 00213 Err("FetchField does not work on empty recordset, meaning GetInsertSQL will fail..."); 00214 } 00215 if ($rs) $rs->Close(); 00216 flush(); 00217 //$db->debug=true; 00218 print "<p>Testing Commit: "; 00219 $time = $db->DBDate(time()); 00220 if (!$db->BeginTrans()) { 00221 print '<b>Transactions not supported</b></p>'; 00222 if ($db->hasTransactions) Err("hasTransactions should be false"); 00223 } else { /* COMMIT */ 00224 if (!$db->hasTransactions) Err("hasTransactions should be true"); 00225 if ($db->transCnt != 1) Err("Invalid transCnt = $db->transCnt (should be 1)"); 00226 $rs = $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (99,'Should Not','Exist (Commit)',$time)"); 00227 if ($rs && $db->CommitTrans()) { 00228 $rs->Close(); 00229 $rs = $db->Execute("select * from ADOXYZ where id=99"); 00230 if ($rs === false || $rs->EOF) { 00231 print '<b>Data not saved</b></p>'; 00232 $rs = $db->Execute("select * from ADOXYZ where id=99"); 00233 print_r($rs); 00234 die(); 00235 } else print 'OK</p>'; 00236 if ($rs) $rs->Close(); 00237 } else { 00238 if (!$rs) { 00239 print "<b>Insert failed</b></p>"; 00240 $db->RollbackTrans(); 00241 } else print "<b>Commit failed</b></p>"; 00242 } 00243 if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)"); 00244 00245 /* ROLLBACK */ 00246 if (!$db->BeginTrans()) print "<p><b>Error in BeginTrans</b>()</p>"; 00247 print "<p>Testing Rollback: "; 00248 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (100,'Should Not','Exist (Rollback)',$time)"); 00249 if ($db->RollbackTrans()) { 00250 $rs = $db->Execute("select * from ADOXYZ where id=100"); 00251 if ($rs && !$rs->EOF) print '<b>Fail: Data should rollback</b></p>'; 00252 else print 'OK</p>'; 00253 if ($rs) $rs->Close(); 00254 } else 00255 print "<b>Commit failed</b></p>"; 00256 00257 $rs = $db->Execute('delete from ADOXYZ where id>50'); 00258 if ($rs) $rs->Close(); 00259 00260 if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)"); 00261 } 00262 00263 if (1) { 00264 print "<p>Testing MetaDatabases()</p>"; 00265 print_r( $db->MetaDatabases()); 00266 00267 print "<p>Testing MetaTables() and MetaColumns()</p>"; 00268 $a = $db->MetaTables(); 00269 if ($a===false) print "<b>MetaTables not supported</b></p>"; 00270 else { 00271 print "Array of tables and views: "; 00272 foreach($a as $v) print " ($v) "; 00273 print '</p>'; 00274 } 00275 00276 $a = $db->MetaTables('VIEW'); 00277 if ($a===false) print "<b>MetaTables not supported (views)</b></p>"; 00278 else { 00279 print "Array of views: "; 00280 foreach($a as $v) print " ($v) "; 00281 print '</p>'; 00282 } 00283 00284 $a = $db->MetaTables(false,false,'aDo%'); 00285 if ($a===false) print "<b>MetaTables not supported (mask)</b></p>"; 00286 else { 00287 print "Array of ado%: "; 00288 foreach($a as $v) print " ($v) "; 00289 print '</p>'; 00290 } 00291 00292 $a = $db->MetaTables('TABLE'); 00293 if ($a===false) print "<b>MetaTables not supported</b></p>"; 00294 else { 00295 print "Array of tables: "; 00296 foreach($a as $v) print " ($v) "; 00297 print '</p>'; 00298 } 00299 00300 $db->debug=0; 00301 $rez = $db->MetaColumns("NOSUCHTABLEHERE"); 00302 if ($rez !== false) { 00303 Err("MetaColumns error handling failed"); 00304 var_dump($rez); 00305 } 00306 $db->debug=1; 00307 $a = $db->MetaColumns('ADOXYZ'); 00308 if ($a===false) print "<b>MetaColumns not supported</b></p>"; 00309 else { 00310 print "<p>Columns of ADOXYZ: <font size=1><br>"; 00311 foreach($a as $v) {print_r($v); echo "<br>";} 00312 echo "</font>"; 00313 } 00314 00315 print "<p>Testing MetaIndexes</p>"; 00316 00317 $a = $db->MetaIndexes(('ADOXYZ'),true); 00318 if ($a===false) print "<b>MetaIndexes not supported</b></p>"; 00319 else { 00320 print "<p>Indexes of ADOXYZ: <font size=1><br>"; 00321 adodb_pr($a); 00322 echo "</font>"; 00323 } 00324 print "<p>Testing MetaPrimaryKeys</p>"; 00325 $a = $db->MetaPrimaryKeys('ADOXYZ'); 00326 var_dump($a); 00327 } 00328 $rs = $db->Execute('delete from ADOXYZ'); 00329 if ($rs) $rs->Close(); 00330 00331 $db->debug = false; 00332 00333 00334 switch ($db->databaseType) { 00335 case 'vfp': 00336 00337 if (0) { 00338 // memo test 00339 $rs = $db->Execute("select data from memo"); 00340 rs2html($rs); 00341 } 00342 break; 00343 00344 case 'postgres7': 00345 case 'postgres64': 00346 case 'postgres': 00347 case 'ibase': 00348 print "<p>Encode=".$db->BlobEncode("abc\0d\"' 00349 ef")."</p>";//' 00350 00351 print "<p>Testing Foreign Keys</p>"; 00352 $arr = $db->MetaForeignKeys('ADOXYZ',false,true); 00353 print_r($arr); 00354 if (!$arr) Err("No MetaForeignKeys"); 00355 break; 00356 00357 case 'odbc_mssql': 00358 case 'mssqlpo': 00359 print "<p>Testing Foreign Keys</p>"; 00360 $arr = $db->MetaForeignKeys('Orders',false,true); 00361 print_r($arr); 00362 if (!$arr) Err("Bad MetaForeignKeys"); 00363 if ($db->databaseType == 'odbc_mssql') break; 00364 00365 case 'mssql': 00366 00367 00368 /* 00369 ASSUME Northwind available... 00370 00371 CREATE PROCEDURE SalesByCategory 00372 @CategoryName nvarchar(15), @OrdYear nvarchar(4) = '1998' 00373 AS 00374 IF @OrdYear != '1996' AND @OrdYear != '1997' AND @OrdYear != '1998' 00375 BEGIN 00376 SELECT @OrdYear = '1998' 00377 END 00378 00379 SELECT ProductName, 00380 TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) * OD.UnitPrice)), 0) 00381 FROM [Order Details] OD, Orders O, Products P, Categories C 00382 WHERE OD.OrderID = O.OrderID 00383 AND OD.ProductID = P.ProductID 00384 AND P.CategoryID = C.CategoryID 00385 AND C.CategoryName = @CategoryName 00386 AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYear 00387 GROUP BY ProductName 00388 ORDER BY ProductName 00389 GO 00390 00391 00392 CREATE PROCEDURE ADODBTestSP 00393 @a nvarchar(25) 00394 AS 00395 SELECT GETDATE() AS T, @a AS A 00396 GO 00397 */ 00398 print "<h4>Testing Stored Procedures for mssql</h4>"; 00399 $saved = $db->debug; 00400 $db->debug=true; 00401 $assoc = $ADODB_FETCH_MODE; 00402 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 00403 $cmd = $db->PrepareSP('ADODBTestSP'); 00404 $ss = "You should see me in the output."; 00405 $db->InParameter($cmd,$ss,'a'); 00406 $rs = $db->Execute($cmd); 00407 #var_dump($rs->fields); 00408 echo $rs->fields['T']." --- ".$rs->fields['A']."---<br>"; 00409 00410 $cat = 'Dairy Products'; 00411 $yr = '1998'; 00412 00413 $stmt = $db->PrepareSP('SalesByCategory'); 00414 $db->InParameter($stmt,$cat,'CategoryName'); 00415 $db->InParameter($stmt,$yr,'OrdYear'); 00416 $rs = $db->Execute($stmt); 00417 rs2html($rs); 00418 00419 $cat = 'Grains/Cereals'; 00420 $yr = 1998; 00421 00422 $stmt = $db->PrepareSP('SalesByCategory'); 00423 $db->InParameter($stmt,$cat,'CategoryName'); 00424 $db->InParameter($stmt,$yr,'OrdYear'); 00425 $rs = $db->Execute($stmt); 00426 rs2html($rs); 00427 00428 $ADODB_FETCH_MODE = $assoc; 00429 00430 /* 00431 Test out params - works in PHP 4.2.3 and 4.3.3 and 4.3.8 but not 4.3.0: 00432 00433 CREATE PROCEDURE at_date_interval 00434 @days INTEGER, 00435 @start VARCHAR(20) OUT, 00436 @end VARCHAR(20) OUT 00437 AS 00438 BEGIN 00439 set @start = CONVERT(VARCHAR(20), getdate(), 101) 00440 set @end =CONVERT(VARCHAR(20), dateadd(day, @days, getdate()), 101 ) 00441 END 00442 GO 00443 */ 00444 $db->debug=1; 00445 $stmt = $db->PrepareSP('at_date_interval'); 00446 $days = 10; 00447 $begin_date = ''; 00448 $end_date = ''; 00449 $db->InParameter($stmt,$days,'days', 4, SQLINT4); 00450 $db->OutParameter($stmt,$begin_date,'start', 20, SQLVARCHAR ); 00451 $db->OutParameter($stmt,$end_date,'end', 20, SQLVARCHAR ); 00452 $db->Execute($stmt); 00453 if (empty($begin_date) or empty($end_date) or $begin_date == $end_date) { 00454 Err("MSSQL SP Test for OUT Failed"); 00455 print "begin=$begin_date end=$end_date<p>"; 00456 } else print "(Today +10days) = (begin=$begin_date end=$end_date)<p>"; 00457 00458 $db->debug = $saved; 00459 break; 00460 case 'oci8': 00461 case 'oci8po': 00462 00463 if (0) { 00464 $t = getmicrotime(); 00465 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 00466 $arr = $db->GetArray('select * from abalone_tree'); 00467 $arr = $db->GetArray('select * from abalone_tree'); 00468 $arr = $db->GetArray('select * from abalone_tree'); 00469 echo "<p>t = ",getmicrotime() - $t,"</p>"; 00470 die(); 00471 } 00472 00473 # cleanup 00474 $db->Execute("delete from photos where id=99 or id=1"); 00475 $db->Execute("insert into photos (id) values(1)"); 00476 $db->Execute("update photos set photo=null,descclob=null where id=1"); 00477 00478 $saved = $db->debug; 00479 $db->debug=true; 00480 00481 00482 00483 /* 00484 CREATE TABLE PHOTOS 00485 ( 00486 ID NUMBER(16) primary key, 00487 PHOTO BLOB, 00488 DESCRIPTION VARCHAR2(4000 BYTE), 00489 DESCCLOB CLOB 00490 ); 00491 00492 INSERT INTO PHOTOS (ID) VALUES(1); 00493 */ 00494 $s = ''; 00495 for ($i = 0; $i <= 500; $i++) { 00496 $s .= '1234567890'; 00497 } 00498 00499 $sql = "INSERT INTO photos ( ID, photo) ". 00500 "VALUES ( :id, empty_blob() )". 00501 " RETURNING photo INTO :xx"; 00502 00503 00504 $blob_data = $s; 00505 $id = 99; 00506 00507 $stmt = $db->PrepareSP($sql); 00508 $db->InParameter($stmt, $id, 'id'); 00509 $blob = $db->InParameter($stmt, $s, 'xx',-1, OCI_B_BLOB); 00510 $db->StartTrans(); 00511 $result = $db->Execute($stmt); 00512 $db->CompleteTrans(); 00513 00514 $s2= $db->GetOne("select photo from photos where id=99"); 00515 echo "<br>---$s2"; 00516 if ($s !== $s2) Err("insert blob does not match"); 00517 00518 print "<h4>Testing Blob: size=".strlen($s)."</h4>"; 00519 $ok = $db->Updateblob('photos','photo',$s,'id=1'); 00520 if (!$ok) Err("Blob failed 1"); 00521 else { 00522 $s2= $db->GetOne("select photo from photos where id=1"); 00523 if ($s !== $s2) Err("updateblob does not match"); 00524 } 00525 00526 print "<h4>Testing Clob: size=".strlen($s)."</h4>"; 00527 $ok = $db->UpdateClob('photos','descclob',$s,'id=1'); 00528 if (!$ok) Err("Clob failed 1"); 00529 else { 00530 $s2= $db->GetOne("select descclob from photos where id=1"); 00531 if ($s !== $s2) Err("updateclob does not match"); 00532 } 00533 00534 00535 $s = ''; 00536 $s2 = ''; 00537 print "<h4>Testing Foreign Keys</h4>"; 00538 $arr = $db->MetaForeignKeys('emp','scott'); 00539 print_r($arr); 00540 if (!$arr) Err("Bad MetaForeignKeys"); 00541 /* 00542 -- TEST PACKAGE 00543 -- "Set scan off" turns off substitution variables. 00544 Set scan off; 00545 00546 CREATE OR REPLACE PACKAGE Adodb AS 00547 TYPE TabType IS REF CURSOR RETURN TAB%ROWTYPE; 00548 PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames IN VARCHAR); 00549 PROCEDURE open_tab2 (tabcursor IN OUT TabType,tablenames IN OUT VARCHAR) ; 00550 PROCEDURE data_out(input IN VARCHAR, output OUT VARCHAR); 00551 PROCEDURE data_in(input IN VARCHAR); 00552 PROCEDURE myproc (p1 IN NUMBER, p2 OUT NUMBER); 00553 END Adodb; 00554 / 00555 00556 00557 CREATE OR REPLACE PACKAGE BODY Adodb AS 00558 PROCEDURE open_tab (tabcursor IN OUT TabType,tablenames IN VARCHAR) IS 00559 BEGIN 00560 OPEN tabcursor FOR SELECT * FROM TAB WHERE tname LIKE tablenames; 00561 END open_tab; 00562 00563 PROCEDURE open_tab2 (tabcursor IN OUT TabType,tablenames IN OUT VARCHAR) IS 00564 BEGIN 00565 OPEN tabcursor FOR SELECT * FROM TAB WHERE tname LIKE tablenames; 00566 tablenames := 'TEST'; 00567 END open_tab2; 00568 00569 PROCEDURE data_out(input IN VARCHAR, output OUT VARCHAR) IS 00570 BEGIN 00571 output := 'Cinta Hati '||input; 00572 END; 00573 00574 PROCEDURE data_in(input IN VARCHAR) IS 00575 ignore varchar(1000); 00576 BEGIN 00577 ignore := input; 00578 END; 00579 00580 PROCEDURE myproc (p1 IN NUMBER, p2 OUT NUMBER) AS 00581 BEGIN 00582 p2 := p1; 00583 END; 00584 END Adodb; 00585 / 00586 00587 */ 00588 00589 print "<h4>Testing Cursor Variables</h4>"; 00590 $rs = $db->ExecuteCursor("BEGIN adodb.open_tab(:zz,'A%'); END;",'zz'); 00591 00592 if ($rs && !$rs->EOF) { 00593 $v = $db->GetOne("SELECT count(*) FROM tab where tname like 'A%'"); 00594 if ($v == $rs->RecordCount()) print "Test 1 RowCount: OK<p>"; 00595 else Err("Test 1 RowCount ".$rs->RecordCount().", actual = $v"); 00596 } else { 00597 print "<b>Error in using Cursor Variables 1</b><p>"; 00598 } 00599 if ($rs) $rs->Close(); 00600 00601 print "<h4>Testing Stored Procedures for oci8</h4>"; 00602 00603 $stmt = $db->PrepareSP("BEGIN adodb.data_out(:a1, :a2); END;"); 00604 $a1 = 'Malaysia'; 00605 //$a2 = ''; # a2 doesn't even need to be defined! 00606 $db->InParameter($stmt,$a1,'a1'); 00607 $db->OutParameter($stmt,$a2,'a2'); 00608 $rs = $db->Execute($stmt); 00609 if ($rs) { 00610 if ($a2 !== 'Cinta Hati Malaysia') print "<b>Stored Procedure Error: a2 = $a2</b><p>"; 00611 else echo "OK: a2=$a2<p>"; 00612 } else { 00613 print "<b>Error in using Stored Procedure IN/Out Variables</b><p>"; 00614 } 00615 00616 $tname = 'A%'; 00617 00618 $stmt = $db->PrepareSP('select * from tab where tname like :tablename'); 00619 $db->Parameter($stmt,$tname,'tablename'); 00620 $rs = $db->Execute($stmt); 00621 rs2html($rs); 00622 00623 $stmt = $db->PrepareSP("begin adodb.data_in(:a1); end;"); 00624 $db->InParameter($stmt,$a1,'a1'); 00625 $db->Execute($stmt); 00626 00627 $db->debug = $saved; 00628 break; 00629 00630 default: 00631 break; 00632 } 00633 $arr = array( 00634 array(1,'Caroline','Miranda'), 00635 array(2,'John','Lim'), 00636 array(3,'Wai Hun','See') 00637 ); 00638 //$db->debug=1; 00639 print "<p>Testing Bulk Insert of 3 rows</p>"; 00640 00641 $sql = "insert into ADOXYZ (id,firstname,lastname) values (".$db->Param('0').",".$db->Param('1').",".$db->Param('2').")"; 00642 $db->bulkBind = true; 00643 $db->StartTrans(); 00644 $db->debug=99; 00645 $db->Execute($sql,$arr); 00646 $db->CompleteTrans(); 00647 $db->bulkBind = false; 00648 $rs = $db->Execute('select * from ADOXYZ order by id'); 00649 if (!$rs || $rs->RecordCount() != 3) Err("Bad bulk insert"); 00650 00651 rs2html($rs); 00652 00653 $db->Execute('delete from ADOXYZ'); 00654 00655 print "<p>Inserting 50 rows</p>"; 00656 00657 for ($i = 0; $i < 5; $i++) { 00658 00659 $time = $db->DBDate(time()); 00660 if (empty($_GET['hide'])) $db->debug = true; 00661 switch($db->databaseType){ 00662 case 'mssqlpo': 00663 case 'mssql': 00664 $sqlt = "CREATE TABLE mytable ( 00665 row1 INT IDENTITY(1,1) NOT NULL, 00666 row2 varchar(16), 00667 PRIMARY KEY (row1))"; 00668 //$db->debug=1; 00669 if (!$db->Execute("delete from mytable")) 00670 $db->Execute($sqlt); 00671 00672 $ok = $db->Execute("insert into mytable (row2) values ('test')"); 00673 $ins_id=$db->Insert_ID(); 00674 echo "Insert ID=";var_dump($ins_id); 00675 if ($ins_id == 0) Err("Bad Insert_ID()"); 00676 $ins_id2 = $db->GetOne("select row1 from mytable"); 00677 if ($ins_id != $ins_id2) Err("Bad Insert_ID() 2"); 00678 00679 $arr = array(0=>'Caroline',1=>'Miranda'); 00680 $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,?,?,$time)"; 00681 break; 00682 case 'mysqli': 00683 case 'mysqlt': 00684 case 'mysql': 00685 $sqlt = "CREATE TABLE `mytable` ( 00686 `row1` int(11) NOT NULL auto_increment, 00687 `row2` varchar(16) NOT NULL default '', 00688 PRIMARY KEY (`row1`), 00689 KEY `myindex` (`row1`,`row2`) 00690 ) "; 00691 if (!$db->Execute("delete from mytable")) 00692 $db->Execute($sqlt); 00693 00694 $ok = $db->Execute("insert into mytable (row2) values ('test')"); 00695 $ins_id=$db->Insert_ID(); 00696 echo "Insert ID=";var_dump($ins_id); 00697 if ($ins_id == 0) Err("Bad Insert_ID()"); 00698 $ins_id2 = $db->GetOne("select row1 from mytable"); 00699 if ($ins_id != $ins_id2) Err("Bad Insert_ID() 2"); 00700 00701 default: 00702 $arr = array(0=>'Caroline',1=>'Miranda'); 00703 $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,?,?,$time)"; 00704 break; 00705 00706 case 'oci8': 00707 case 'oci805': 00708 $arr = array('first'=>'Caroline','last'=>'Miranda'); 00709 $amt = rand() % 100; 00710 $sql = "insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+0,:first,:last,$time)"; 00711 break; 00712 } 00713 if ($i & 1) { 00714 $sql = $db->Prepare($sql); 00715 } 00716 $rs = $db->Execute($sql,$arr); 00717 00718 if ($rs === false) Err( 'Error inserting with parameters'); 00719 else $rs->Close(); 00720 $db->debug = false; 00721 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+1,'John','Lim',$time)"); 00722 /*$ins_id=$db->Insert_ID(); 00723 echo "Insert ID=";var_dump($ins_id);*/ 00724 if ($db->databaseType == 'mysql') if ($ins_id == 0) Err('Bad Insert_ID'); 00725 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+2,'Mary','Lamb',$time )"); 00726 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+3,'George','Washington',$time )"); 00727 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+4,'Mr. Alan','Tam',$time )"); 00728 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+5,'Alan',".$db->quote("Turing'ton").",$time )"); 00729 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created)values ($i*10+6,'Serena','Williams',$time )"); 00730 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+7,'Yat Sun','Sun',$time )"); 00731 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+8,'Wai Hun','See',$time )"); 00732 $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values ($i*10+9,'Steven','Oey',$time )"); 00733 } // for 00734 if (1) { 00735 $db->debug=1; 00736 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 00737 $cnt = $db->GetOne("select count(*) from ADOXYZ"); 00738 $rs = $db->Execute('update ADOXYZ set id=id+1'); 00739 if (!is_object($rs)) { 00740 print_r($rs); 00741 err("Update should return object"); 00742 } 00743 if (!$rs) err("Update generated error"); 00744 00745 $nrows = $db->Affected_Rows(); 00746 if ($nrows === false) print "<p><b>Affected_Rows() not supported</b></p>"; 00747 else if ($nrows != $cnt) print "<p><b>Affected_Rows() Error: $nrows returned (should be 50) </b></p>"; 00748 else print "<p>Affected_Rows() passed</p>"; 00749 } 00750 00751 if ($db->dataProvider == 'oci8') $array = array('zid'=>1,'zdate'=>date('Y-m-d',time())); 00752 else $array=array(1,date('Y-m-d',time())); 00753 00754 00755 #$array = array(1,date('Y-m-d',time())); 00756 $id = $db->GetOne("select id from ADOXYZ 00757 where id=".$db->Param('zid')." and created>=".$db->Param('ZDATE')."", 00758 $array); 00759 if ($id != 1) Err("Bad bind; id=$id"); 00760 else echo "<br>Bind date/integer 1 passed"; 00761 00762 $array =array(1,$db->BindDate(time())); 00763 $id = $db->GetOne("select id from ADOXYZ 00764 where id=".$db->Param('0')." and created>=".$db->Param('1')."", 00765 $array); 00766 if ($id != 1) Err("Bad bind; id=$id"); 00767 else echo "<br>Bind date/integer 2 passed"; 00768 00769 $db->debug = false; 00770 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 00772 00773 $rs = $db->Execute("select * from ADOXYZ where firstname = 'not known'"); 00774 if (!$rs || !$rs->EOF) print "<p><b>Error on empty recordset</b></p>"; 00775 else if ($rs->RecordCount() != 0) { 00776 print "<p><b>Error on RecordCount. Should be 0. Was ".$rs->RecordCount()."</b></p>"; 00777 print_r($rs->fields); 00778 } 00779 if ($db->databaseType !== 'odbc') { 00780 $rs = $db->Execute("select id,firstname,lastname,created,".$db->random." from ADOXYZ order by id"); 00781 if ($rs) { 00782 if ($rs->RecordCount() != 50) { 00783 print "<p><b>RecordCount returns ".$rs->RecordCount().", should be 50</b></p>"; 00784 adodb_pr($rs->GetArray()); 00785 $poc = $rs->PO_RecordCount('ADOXYZ'); 00786 if ($poc == 50) print "<p> PO_RecordCount passed</p>"; 00787 else print "<p><b>PO_RecordCount returns wrong value: $poc</b></p>"; 00788 } else print "<p>RecordCount() passed</p>"; 00789 if (isset($rs->fields['firstname'])) print '<p>The fields columns can be indexed by column name.</p>'; 00790 else { 00791 Err( '<p>The fields columns <i>cannot</i> be indexed by column name.</p>'); 00792 print_r($rs->fields); 00793 } 00794 if (empty($_GET['hide'])) rs2html($rs); 00795 } 00796 else print "<p><b>Error in Execute of SELECT with random</b></p>"; 00797 } 00798 $val = $db->GetOne("select count(*) from ADOXYZ"); 00799 if ($val == 50) print "<p>GetOne returns ok</p>"; 00800 else print "<p><b>Fail: GetOne returns $val</b></p>"; 00801 00802 echo "<b>GetRow Test</b>"; 00803 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 00804 $val1 = $db->GetRow("select count(*) from ADOXYZ"); 00805 $val2 = $db->GetRow("select count(*) from ADOXYZ"); 00806 if ($val1[0] == 50 and sizeof($val1) == 1 and $val2[0] == 50 and sizeof($val2) == 1) print "<p>GetRow returns ok</p>"; 00807 else { 00808 print_r($val); 00809 print "<p><b>Fail: GetRow returns {$val2[0]}</b></p>"; 00810 } 00811 00812 print "<p>FetchObject/FetchNextObject Test</p>"; 00813 $rs = $db->Execute('select * from ADOXYZ'); 00814 if ($rs) { 00815 if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>"; 00816 00817 while ($o = $rs->FetchNextObject()) { // calls FetchObject internally 00818 if (!is_string($o->FIRSTNAME) || !is_string($o->LASTNAME)) { 00819 print_r($o); 00820 print "<p><b>Firstname is not string</b></p>"; 00821 break; 00822 } 00823 } 00824 } else { 00825 print "<p><b>Failed rs</b></p>"; 00826 die("<p>ADOXYZ table cannot be read - die()"); 00827 } 00828 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 00829 print "<p>FetchObject/FetchNextObject Test 2</p>"; 00830 #$db->debug=99; 00831 $rs = $db->Execute('select * from ADOXYZ'); 00832 if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>"; 00833 print_r($rs->fields); 00834 while ($o = $rs->FetchNextObject()) { // calls FetchObject internally 00835 if (!is_string($o->FIRSTNAME) || !is_string($o->LASTNAME)) { 00836 print_r($o); 00837 print "<p><b>Firstname is not string</b></p>"; 00838 break; 00839 } 00840 } 00841 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 00842 00843 $savefetch = $ADODB_FETCH_MODE; 00844 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 00845 00846 print "<p>CacheSelectLimit Test...</p>"; 00847 $db->debug=1; 00848 $rs = $db->CacheSelectLimit('select id, firstname from ADOXYZ order by id',2); 00849 00850 if ($rs && !$rs->EOF) { 00851 if (isset($rs->fields[0])) { 00852 Err("ASSOC has numeric fields"); 00853 print_r($rs->fields); 00854 } 00855 if ($rs->fields['id'] != 1) {Err("Error"); print_r($rs->fields);}; 00856 if (trim($rs->fields['firstname']) != 'Caroline') {print Err("Error 2"); print_r($rs->fields);}; 00857 00858 $rs->MoveNext(); 00859 if ($rs->fields['id'] != 2) {Err("Error 3"); print_r($rs->fields);}; 00860 $rs->MoveNext(); 00861 if (!$rs->EOF) { 00862 Err("Error EOF"); 00863 print_r($rs); 00864 } 00865 } 00866 00867 print "<p>FETCH_MODE = ASSOC: Should get 1, Caroline</p>"; 00868 $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',2); 00869 if ($rs && !$rs->EOF) { 00870 if (ADODB_ASSOC_CASE == 2) { 00871 $id = 'ID'; 00872 $fname = 'FIRSTNAME'; 00873 }else { 00874 $id = 'id'; 00875 $fname = 'firstname'; 00876 } 00877 if ($rs->fields[$id] != 1) {Err("Error 1"); print_r($rs->fields);}; 00878 if (trim($rs->fields[$fname]) != 'Caroline') {Err("Error 2"); print_r($rs->fields);}; 00879 $rs->MoveNext(); 00880 if ($rs->fields[$id] != 2) {Err("Error 3"); print_r($rs->fields);}; 00881 $rs->MoveNext(); 00882 if (!$rs->EOF) Err("Error EOF"); 00883 else if (is_array($rs->fields) || $rs->fields) { 00884 Err("Error: ## fields should be set to false on EOF"); 00885 print_r($rs->fields); 00886 } 00887 } 00888 00889 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 00890 print "<p>FETCH_MODE = NUM: Should get 1, Caroline</p>"; 00891 $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',1); 00892 if ($rs && !$rs->EOF) { 00893 if (isset($rs->fields['id'])) Err("FETCH_NUM has ASSOC fields"); 00894 if ($rs->fields[0] != 1) {Err("Error 1"); print_r($rs->fields);}; 00895 if (trim($rs->fields[1]) != 'Caroline') {Err("Error 2");print_r($rs->fields);}; 00896 $rs->MoveNext(); 00897 if (!$rs->EOF) Err("Error EOF"); 00898 00899 } 00900 $ADODB_FETCH_MODE = $savefetch; 00901 00902 $db->debug = false; 00903 print "<p>GetRowAssoc Upper: Should get 1, Caroline</p>"; 00904 $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',1); 00905 if ($rs && !$rs->EOF) { 00906 $arr = $rs->GetRowAssoc(); 00907 if ($arr['ID'] != 1) {Err("Error 1");print_r($arr);}; 00908 if (trim($arr['FIRSTNAME']) != 'Caroline') {Err("Error 2"); print_r($arr);}; 00909 $rs->MoveNext(); 00910 if (!$rs->EOF) Err("Error EOF"); 00911 00912 } 00913 print "<p>GetRowAssoc Lower: Should get 1, Caroline</p>"; 00914 $rs = $db->SelectLimit('select id,firstname from ADOXYZ order by id',1); 00915 if ($rs && !$rs->EOF) { 00916 $arr = $rs->GetRowAssoc(false); 00917 if ($arr['id'] != 1) {Err("Error 1"); print_r($arr);}; 00918 if (trim($arr['firstname']) != 'Caroline') {Err("Error 2"); print_r($arr);}; 00919 00920 } 00921 00922 print "<p>GetCol Test</p>"; 00923 $col = $db->GetCol('select distinct firstname from ADOXYZ order by 1'); 00924 if (!is_array($col)) Err("Col size is wrong"); 00925 if (trim($col[0]) != 'Alan' or trim($col[9]) != 'Yat Sun') Err("Col elements wrong"); 00926 00927 00928 $col = $db->CacheGetCol('select distinct firstname from ADOXYZ order by 1'); 00929 if (!is_array($col)) Err("Col size is wrong"); 00930 if (trim($col[0]) != 'Alan' or trim($col[9]) != 'Yat Sun') Err("Col elements wrong"); 00931 00932 $db->debug = true; 00933 00934 00935 echo "<p>Date Update Test</p>"; 00936 $zdate = date('Y-m-d',time()+3600*24); 00937 $zdate = $db->DBDate($zdate); 00938 $db->Execute("update ADOXYZ set created=$zdate where id=1"); 00939 $row = $db->GetRow("select created,firstname from ADOXYZ where id=1"); 00940 print_r($row); echo "<br>"; 00941 00942 00943 00944 print "<p>SelectLimit Distinct Test 1: Should see Caroline, John and Mary</p>"; 00945 $rs = $db->SelectLimit('select distinct * from ADOXYZ order by id',3); 00946 00947 00948 if ($rs && !$rs->EOF) { 00949 if (trim($rs->fields[1]) != 'Caroline') Err("Error 1 (exp Caroline), ".$rs->fields[1]); 00950 $rs->MoveNext(); 00951 00952 if (trim($rs->fields[1]) != 'John') Err("Error 2 (exp John), ".$rs->fields[1]); 00953 $rs->MoveNext(); 00954 if (trim($rs->fields[1]) != 'Mary') Err("Error 3 (exp Mary),".$rs->fields[1]); 00955 $rs->MoveNext(); 00956 if (! $rs->EOF) Err("Error EOF"); 00957 //rs2html($rs); 00958 } else Err("Failed SelectLimit Test 1"); 00959 00960 print "<p>SelectLimit Test 2: Should see Mary, George and Mr. Alan</p>"; 00961 $rs = $db->SelectLimit('select * from ADOXYZ order by id',3,2); 00962 if ($rs && !$rs->EOF) { 00963 if (trim($rs->fields[1]) != 'Mary') Err("Error 1 - No Mary, instead: ".$rs->fields[1]); 00964 $rs->MoveNext(); 00965 if (trim($rs->fields[1]) != 'George')Err("Error 2 - No George, instead: ".$rs->fields[1]); 00966 $rs->MoveNext(); 00967 if (trim($rs->fields[1]) != 'Mr. Alan') Err("Error 3 - No Mr. Alan, instead: ".$rs->fields[1]); 00968 $rs->MoveNext(); 00969 if (! $rs->EOF) Err("Error EOF"); 00970 // rs2html($rs); 00971 } 00972 else Err("Failed SelectLimit Test 2 ". ($rs ? 'EOF':'no RS')); 00973 00974 print "<p>SelectLimit Test 3: Should see Wai Hun and Steven</p>"; 00975 $db->debug=1; 00976 global $A; $A=1; 00977 $rs = $db->SelectLimit('select * from ADOXYZ order by id',-1,48); 00978 $A=0; 00979 if ($rs && !$rs->EOF) { 00980 if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>"; 00981 if (trim($rs->fields[1]) != 'Wai Hun') Err("Error 1 ".$rs->fields[1]); 00982 $rs->MoveNext(); 00983 if (trim($rs->fields[1]) != 'Steven') Err("Error 2 ".$rs->fields[1]); 00984 $rs->MoveNext(); 00985 if (! $rs->EOF) { 00986 Err("Error EOF"); 00987 } 00988 //rs2html($rs); 00989 } 00990 else Err("Failed SelectLimit Test 3"); 00991 $db->debug = false; 00992 00993 00994 $rs = $db->Execute("select * from ADOXYZ order by id"); 00995 print "<p>Testing Move()</p>"; 00996 if (!$rs)Err( "Failed Move SELECT"); 00997 else { 00998 if (!$rs->Move(2)) { 00999 if (!$rs->canSeek) print "<p>$db->databaseType: <b>Move(), MoveFirst() nor MoveLast() not supported.</b></p>"; 01000 else print '<p><b>RecordSet->canSeek property should be set to false</b></p>'; 01001 } else { 01002 $rs->MoveFirst(); 01003 if (trim($rs->Fields("firstname")) != 'Caroline') { 01004 print "<p><b>$db->databaseType: MoveFirst failed -- probably cannot scroll backwards</b></p>"; 01005 } 01006 else print "MoveFirst() OK<BR>"; 01007 01008 // Move(3) tests error handling -- MoveFirst should not move cursor 01009 $rs->Move(3); 01010 if (trim($rs->Fields("firstname")) != 'George') { 01011 print '<p>'.$rs->Fields("id")."<b>$db->databaseType: Move(3) failed</b></p>"; 01012 } else print "Move(3) OK<BR>"; 01013 01014 $rs->Move(7); 01015 if (trim($rs->Fields("firstname")) != 'Yat Sun') { 01016 print '<p>'.$rs->Fields("id")."<b>$db->databaseType: Move(7) failed</b></p>"; 01017 print_r($rs); 01018 } else print "Move(7) OK<BR>"; 01019 if ($rs->EOF) Err("Move(7) is EOF already"); 01020 $rs->MoveLast(); 01021 if (trim($rs->Fields("firstname")) != 'Steven'){ 01022 print '<p>'.$rs->Fields("id")."<b>$db->databaseType: MoveLast() failed</b></p>"; 01023 print_r($rs); 01024 }else print "MoveLast() OK<BR>"; 01025 $rs->MoveNext(); 01026 if (!$rs->EOF) err("Bad MoveNext"); 01027 if ($rs->canSeek) { 01028 $rs->Move(3); 01029 if (trim($rs->Fields("firstname")) != 'George') { 01030 print '<p>'.$rs->Fields("id")."<b>$db->databaseType: Move(3) after MoveLast failed</b></p>"; 01031 01032 } else print "Move(3) after MoveLast() OK<BR>"; 01033 } 01034 01035 print "<p>Empty Move Test"; 01036 $rs = $db->Execute("select * from ADOXYZ where id > 0 and id < 0"); 01037 $rs->MoveFirst(); 01038 if (!$rs->EOF || $rs->fields) Err("Error in empty move first"); 01039 } 01040 } 01041 01042 $rs = $db->Execute('select * from ADOXYZ where id = 2'); 01043 if ($rs->EOF || !is_array($rs->fields)) Err("Error in select"); 01044 $rs->MoveNext(); 01045 if (!$rs->EOF) Err("Error in EOF (xx) "); 01046 // $db->debug=true; 01047 print "<p>Testing ADODB_FETCH_ASSOC and concat: concat firstname and lastname</p>"; 01048 01049 $save = $ADODB_FETCH_MODE; 01050 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 01051 if ($db->dataProvider == 'postgres') { 01052 $sql = "select ".$db->Concat('cast(firstname as varchar)',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ"; 01053 $rs = $db->Execute($sql); 01054 } else { 01055 $sql = "select distinct ".$db->Concat('firstname',$db->qstr(' '),'lastname')." as fullname,id,".$db->sysTimeStamp." as d from ADOXYZ"; 01056 $rs = $db->Execute($sql); 01057 } 01058 if ($rs) { 01059 if (empty($_GET['hide'])) rs2html($rs); 01060 } else { 01061 Err( "Failed Concat:".$sql); 01062 } 01063 $ADODB_FETCH_MODE = $save; 01064 print "<hr />Testing GetArray() "; 01065 //$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 01066 01067 $rs = $db->Execute("select * from ADOXYZ order by id"); 01068 if ($rs) { 01069 $arr = $rs->GetArray(10); 01070 if (sizeof($arr) != 10 || trim($arr[1][1]) != 'John' || trim($arr[1][2]) != 'Lim') print $arr[1][1].' '.$arr[1][2]."<b> ERROR</b><br>"; 01071 else print " OK<BR>"; 01072 } 01073 01074 $arr = $db->GetArray("select x from ADOXYZ"); 01075 $e = $db->ErrorMsg(); $e2 = $db->ErrorNo(); 01076 echo "Testing error handling, should see illegal column 'x' error=<i>$e ($e2) </i><br>"; 01077 if (!$e || !$e2) Err("Error handling did not work"); 01078 print "Testing FetchNextObject for 1 object "; 01079 $rs = $db->Execute("select distinct lastname,firstname from ADOXYZ where firstname='Caroline'"); 01080 $fcnt = 0; 01081 if ($rs) 01082 while ($o = $rs->FetchNextObject()) { 01083 $fcnt += 1; 01084 } 01085 if ($fcnt == 1) print " OK<BR>"; 01086 else print "<b>FAILED</b><BR>"; 01087 01088 $stmt = $db->Prepare("select * from ADOXYZ where id < 3"); 01089 $rs = $db->Execute($stmt); 01090 if (!$rs) Err("Prepare failed"); 01091 else { 01092 $arr = $rs->GetArray(); 01093 if (!$arr) Err("Prepare failed 2"); 01094 if (sizeof($arr) != 2) Err("Prepare failed 3"); 01095 } 01096 print "Testing GetAssoc() "; 01097 $savecrecs = $ADODB_COUNTRECS; 01098 $ADODB_COUNTRECS = false; 01099 //$arr = $db->GetArray("select lastname,firstname from ADOXYZ"); 01100 //print_r($arr); 01101 print "<hr />"; 01102 $rs = $db->Execute("select distinct lastname,firstname,created from ADOXYZ"); 01103 01104 if ($rs) { 01105 $arr = $rs->GetAssoc(); 01106 //print_r($arr); 01107 if (empty($arr['See']) || trim(reset($arr['See'])) != 'Wai Hun') print $arr['See']." <b>ERROR</b><br>"; 01108 else print " OK 1"; 01109 } 01110 01111 $arr = $db->GetAssoc("select distinct lastname,firstname from ADOXYZ"); 01112 if ($arr) { 01113 //print_r($arr); 01114 if (empty($arr['See']) || trim($arr['See']) != 'Wai Hun') print $arr['See']." <b>ERROR</b><br>"; 01115 else print " OK 2<BR>"; 01116 } 01117 // Comment this out to test countrecs = false 01118 $ADODB_COUNTRECS = $savecrecs; 01119 $db->debug=1; 01120 $query = $db->Prepare("select count(*) from ADOXYZ"); 01121 $rs = $db->CacheExecute(10,$query); 01122 if (reset($rs->fields) != 50) echo Err("$cnt wrong for Prepare/CacheGetOne"); 01123 01124 for ($loop=0; $loop < 1; $loop++) { 01125 print "Testing GetMenu() and CacheExecute<BR>"; 01126 $db->debug = true; 01127 $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); 01128 01129 01130 01131 01132 if ($rs) print 'With blanks, Steven selected:'. $rs->GetMenu('menu','Steven').'<BR>'; 01133 else print " Fail<BR>"; 01134 $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); 01135 01136 if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu('menu','Steven',false).'<BR>'; 01137 else print " Fail<BR>"; 01138 01139 $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); 01140 01141 if ($rs) print ' 1st line set to **** , Steven selected: '. $rs->GetMenu('menu','Steven','1st:****').'<BR>'; 01142 else print " Fail<BR>"; 01143 01144 01145 01146 $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); 01147 if ($rs) print ' Multiple, Alan selected: '. $rs->GetMenu('menu','Alan',false,true).'<BR>'; 01148 else print " Fail<BR>"; 01149 print '</p><hr />'; 01150 01151 $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); 01152 if ($rs) { 01153 print ' Multiple, Alan and George selected: '. $rs->GetMenu('menu',array('Alan','George'),false,true); 01154 if (empty($rs->connection)) print "<b>Connection object missing from recordset</b></br>"; 01155 } else print " Fail<BR>"; 01156 print '</p><hr />'; 01157 01158 print "Testing GetMenu3()<br>"; 01159 $rs = $db->Execute("select ".$db->Concat('firstname',"'-'",'id').",id, lastname from ADOXYZ order by lastname,id"); 01160 if ($rs) print "Grouped Menu: ".$rs->GetMenu3('name'); 01161 else Err('Grouped Menu GetMenu3()'); 01162 print "<hr />"; 01163 01164 print "Testing GetMenu2() <BR>"; 01165 $rs = $db->CacheExecute(4,"select distinct firstname,lastname from ADOXYZ"); 01166 if ($rs) print 'With blanks, Steven selected:'. $rs->GetMenu2('menu',('Oey')).'<BR>'; 01167 else print " Fail<BR>"; 01168 $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ"); 01169 if ($rs) print ' No blanks, Steven selected: '. $rs->GetMenu2('menu',('Oey'),false).'<BR>'; 01170 else print " Fail<BR>"; 01171 } 01172 echo "<h3>CacheExecute</h3>"; 01173 01174 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 01175 $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ"); 01176 print_r($rs->fields); echo $rs->fetchMode;echo "<br>"; 01177 echo $rs->Fields('firstname'); 01178 01179 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 01180 $rs = $db->CacheExecute(6,"select distinct firstname,lastname from ADOXYZ"); 01181 print_r($rs->fields);echo "<br>"; 01182 echo $rs->Fields('firstname'); 01183 $db->debug = false; 01184 01185 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 01186 // phplens 01187 01188 $sql = 'select * from ADOXYZ where 0=1'; 01189 echo "<p>**Testing '$sql' (phplens compat 1)</p>"; 01190 $rs = $db->Execute($sql); 01191 if (!$rs) err( "<b>No recordset returned for '$sql'</b>"); 01192 if (!$rs->FieldCount()) err( "<b>No fields returned for $sql</b>"); 01193 if (!$rs->FetchField(1)) err( "<b>FetchField failed for $sql</b>"); 01194 01195 $sql = 'select * from ADOXYZ order by 1'; 01196 echo "<p>**Testing '$sql' (phplens compat 2)</p>"; 01197 $rs = $db->Execute($sql); 01198 if (!$rs) err( "<b>No recordset returned for '$sql'<br>".$db->ErrorMsg()."</b>"); 01199 01200 01201 $sql = 'select * from ADOXYZ order by 1,1'; 01202 echo "<p>**Testing '$sql' (phplens compat 3)</p>"; 01203 $rs = $db->Execute($sql); 01204 if (!$rs) err( "<b>No recordset returned for '$sql'<br>".$db->ErrorMsg()."</b>"); 01205 01206 01207 // Move 01208 $rs1 = $db->Execute("select id from ADOXYZ where id <= 2 order by 1"); 01209 $rs2 = $db->Execute("select id from ADOXYZ where id = 3 or id = 4 order by 1"); 01210 01211 if ($rs1) $rs1->MoveLast(); 01212 if ($rs2) $rs2->MoveLast(); 01213 01214 if (empty($rs1) || empty($rs2) || $rs1->fields[0] != 2 || $rs2->fields[0] != 4) { 01215 $a = $rs1->fields[0]; 01216 $b = $rs2->fields[0]; 01217 print "<p><b>Error in multiple recordset test rs1=$a rs2=$b (should be rs1=2 rs2=4)</b></p>"; 01218 } else 01219 print "<p>Testing multiple recordsets OK</p>"; 01220 01221 01222 echo "<p> GenID test: "; 01223 for ($i=1; $i <= 10; $i++) 01224 echo "($i: ",$val = $db->GenID($db->databaseType.'abcseq7' ,5), ") "; 01225 if ($val == 0) Err("GenID not supported"); 01226 01227 if ($val) { 01228 $db->DropSequence('abc_seq2'); 01229 $db->CreateSequence('abc_seq2'); 01230 $val = $db->GenID('abc_seq2'); 01231 $db->DropSequence('abc_seq2'); 01232 $db->CreateSequence('abc_seq2'); 01233 $val = $db->GenID('abc_seq2'); 01234 if ($val != 1) Err("Drop and Create Sequence not supported ($val)"); 01235 } 01236 echo "<p>"; 01237 01238 if (substr($db->dataProvider,0,3) != 'notused') { // used to crash ado 01239 $sql = "select firstnames from ADOXYZ"; 01240 print "<p>Testing execution of illegal statement: <i>$sql</i></p>"; 01241 if ($db->Execute($sql) === false) { 01242 print "<p>This returns the following ErrorMsg(): <i>".$db->ErrorMsg()."</i> and ErrorNo(): ".$db->ErrorNo().'</p>'; 01243 } else 01244 print "<p><b>Error in error handling -- Execute() should return false</b></p>"; 01245 } else 01246 print "<p><b>ADO skipped error handling of bad select statement</b></p>"; 01247 01248 print "<p>ASSOC TEST 2<br>"; 01249 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 01250 $rs = $db->query('select * from ADOXYZ order by id'); 01251 if ($ee = $db->ErrorMsg()) { 01252 Err("Error message=$ee"); 01253 } 01254 if ($ee = $db->ErrorNo()) { 01255 Err("Error No = $ee"); 01256 } 01257 print_r($rs->fields); 01258 for($i=0;$i<$rs->FieldCount();$i++) 01259 { 01260 $fld=$rs->FetchField($i); 01261 print "<br> Field name is ".$fld->name; 01262 print " ".$rs->Fields($fld->name); 01263 } 01264 01265 01266 print "<p>BOTH TEST 2<br>"; 01267 if ($db->dataProvider == 'ado') { 01268 print "<b>ADODB_FETCH_BOTH not supported</b> for dataProvider=".$db->dataProvider."<br>"; 01269 } else { 01270 $ADODB_FETCH_MODE = ADODB_FETCH_BOTH; 01271 $rs = $db->query('select * from ADOXYZ order by id'); 01272 for($i=0;$i<$rs->FieldCount();$i++) 01273 { 01274 $fld=$rs->FetchField($i); 01275 print "<br> Field name is ".$fld->name; 01276 print " ".$rs->Fields($fld->name); 01277 } 01278 } 01279 01280 print "<p>NUM TEST 2<br>"; 01281 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 01282 $rs = $db->query('select * from ADOXYZ order by id'); 01283 for($i=0;$i<$rs->FieldCount();$i++) 01284 { 01285 $fld=$rs->FetchField($i); 01286 print "<br> Field name is ".$fld->name; 01287 print " ".$rs->Fields($fld->name); 01288 } 01289 01290 print "<p>ASSOC Test of SelectLimit<br>"; 01291 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 01292 $rs = $db->selectlimit('select * from ADOXYZ order by id',3,4); 01293 $cnt = 0; 01294 while ($rs && !$rs->EOF) { 01295 $cnt += 1; 01296 if (!isset($rs->fields['firstname'])) { 01297 print "<br><b>ASSOC returned numeric field</b></p>"; 01298 break; 01299 } 01300 $rs->MoveNext(); 01301 } 01302 if ($cnt != 3) print "<br><b>Count should be 3, instead it was $cnt</b></p>"; 01303 01304 01305 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 01306 if ($db->sysDate) { 01307 $saved = $db->debug; 01308 $db->debug = 1; 01309 $rs = $db->Execute("select {$db->sysDate} from ADOXYZ where id=1"); 01310 if (ADORecordSet::UnixDate(date('Y-m-d')) != $rs->UnixDate($rs->fields[0])) { 01311 print "<p><b>Invalid date {$rs->fields[0]}</b></p>"; 01312 } else 01313 print "<p>Passed \$sysDate test ({$rs->fields[0]})</p>"; 01314 01315 print_r($rs->FetchField(0)); 01316 print time(); 01317 $db->debug=$saved; 01318 } else { 01319 print "<p><b>\$db->sysDate not defined</b></p>"; 01320 } 01321 01322 print "<p>Test CSV</p>"; 01323 include_once('../toexport.inc.php'); 01324 //$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 01325 $rs = $db->SelectLimit('select id,firstname,lastname,created,\'He, he\' he,\'"\' q from ADOXYZ',10); 01326 01327 print "<pre>"; 01328 print rs2csv($rs); 01329 print "</pre>"; 01330 01331 $rs = $db->SelectLimit('select id,firstname,lastname,created,\'The "young man", he said\' from ADOXYZ',10); 01332 01333 if (PHP_VERSION < 5) { 01334 print "<pre>"; 01335 rs2tabout($rs); 01336 print "</pre>"; 01337 } 01338 #print " CacheFlush "; 01339 #$db->CacheFlush(); 01340 01341 $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A'); 01342 $sql = "SELECT $date from ADOXYZ"; 01343 print "<p>Test SQLDate: ".htmlspecialchars($sql)."</p>"; 01344 $rs = $db->SelectLimit($sql,1); 01345 $d = date('d-m-M-Y-').'Q'.(ceil(date('m')/3.0)).date(' h:i:s A'); 01346 if (!$rs) Err("SQLDate query returned no recordset"); 01347 else if ($d != $rs->fields[0]) Err("SQLDate 1 failed expected: <br>act:$d <br>sql:".$rs->fields[0]); 01348 01349 $date = $db->SQLDate('d-m-M-Y-\QQ h:i:s A',$db->DBDate("1974-02-25")); 01350 $sql = "SELECT $date from ADOXYZ"; 01351 print "<p>Test SQLDate: ".htmlspecialchars($sql)."</p>"; 01352 $db->debug=1; 01353 $rs = $db->SelectLimit($sql,1); 01354 $ts = ADOConnection::UnixDate('1974-02-25'); 01355 $d = date('d-m-M-Y-',$ts).'Q'.(ceil(date('m',$ts)/3.0)).date(' h:i:s A',$ts); 01356 if (!$rs) { 01357 Err("SQLDate query returned no recordset"); 01358 echo $db->ErrorMsg(),'<br>'; 01359 } else if ($d != reset($rs->fields)) { 01360 Err("SQLDate 2 failed expected: <br>act:$d <br>sql:".$rs->fields[0].' <br>'.$db->ErrorMsg()); 01361 } 01362 01363 01364 print "<p>Test Filter</p>"; 01365 $db->debug = 1; 01366 01367 $rs = $db->SelectLimit('select * from ADOXYZ where id < 3 order by id'); 01368 01369 $rs = RSFilter($rs,'do_strtolower'); 01370 if (trim($rs->fields[1]) != 'caroline' && trim($rs->fields[2]) != 'miranda') { 01371 err('**** RSFilter failed'); 01372 print_r($rs->fields); 01373 } 01374 01375 rs2html($rs); 01376 01377 $db->debug=1; 01378 01379 01380 print "<p>Test Replace</p>"; 01381 01382 $ret = $db->Replace('ADOXYZ', 01383 array('id'=>1,'firstname'=>'Caroline','lastname'=>'Miranda'), 01384 array('id'), 01385 $autoq = true); 01386 if (!$ret) echo "<p>Error in replacing existing record</p>"; 01387 else { 01388 $saved = $db->debug; 01389 $db->debug = 0; 01390 $savec = $ADODB_COUNTRECS; 01391 $ADODB_COUNTRECS = true; 01392 $rs = $db->Execute('select * FROM ADOXYZ where id=1'); 01393 $db->debug = $saved; 01394 if ($rs->RecordCount() != 1) { 01395 $cnt = $rs->RecordCount(); 01396 rs2html($rs); 01397 print "<b>Error - Replace failed, count=$cnt</b><p>"; 01398 } 01399 $ADODB_COUNTRECS = $savec; 01400 } 01401 $ret = $db->Replace('ADOXYZ', 01402 array('id'=>1000,'firstname'=>'Harun','lastname'=>'Al-Rashid'), 01403 array('id','firstname'), 01404 $autoq = true); 01405 if ($ret != 2) print "<b>Replace failed: </b>"; 01406 print "test A return value=$ret (2 expected) <p>"; 01407 01408 $ret = $db->Replace('ADOXYZ', 01409 array('id'=>1000,'firstname'=>'Sherazade','lastname'=>'Al-Rashid'), 01410 'id', 01411 $autoq = true); 01412 if ($ret != 1) 01413 if ($db->dataProvider == 'ibase' && $ret == 2); 01414 else print "<b>Replace failed: </b>"; 01415 print "test B return value=$ret (1 or if ibase then 2 expected) <p>"; 01416 01417 print "<h3>rs2rs Test</h3>"; 01418 01419 $rs = $db->Execute('select * from ADOXYZ where id>= 1 order by id'); 01420 $rs = $db->_rs2rs($rs); 01421 $rs->valueX = 'X'; 01422 $rs->MoveNext(); 01423 $rs = $db->_rs2rs($rs); 01424 if (!isset($rs->valueX)) err("rs2rs does not preserve array recordsets"); 01425 if (reset($rs->fields) != 1) err("rs2rs does not move to first row: id=".reset($rs->fields)); 01426 01428 include_once('../pivottable.inc.php'); 01429 print "<h3>Pivot Test</h3>"; 01430 $db->debug=true; 01431 $sql = PivotTableSQL( 01432 $db, # adodb connection 01433 'ADOXYZ', # tables 01434 'firstname', # row fields 01435 'lastname', # column fields 01436 false, # join 01437 'ID', # sum 01438 'Sum ', # label for sum 01439 'sum', # aggregate function 01440 true 01441 ); 01442 $rs = $db->Execute($sql); 01443 if ($rs) rs2html($rs); 01444 else Err("Pivot sql error"); 01445 01446 $pear = false; //true; 01447 $db->debug=false; 01448 01449 if ($pear) { 01450 // PEAR TESTS BELOW 01451 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 01452 01453 include_once "PEAR.php"; 01454 $rs = $db->query('select * from ADOXYZ where id>0 and id<10 order by id'); 01455 01456 $i = 0; 01457 if ($rs && !$rs->EOF) { 01458 while ($arr = $rs->fetchRow()) { 01459 $i++; 01460 //print "$i "; 01461 if ($arr[0] != $i) { 01462 print_r($arr); 01463 print "<p><b>PEAR DB emulation error 1.</b></p>"; 01464 $pear = false; 01465 break; 01466 } 01467 } 01468 $rs->Close(); 01469 } 01470 01471 01472 if ($i != $db->GetOne('select count(*) from ADOXYZ where id>0 and id<10')) { 01473 print "<p><b>PEAR DB emulation error 1.1 EOF ($i)</b></p>"; 01474 $pear = false; 01475 } 01476 01477 $rs = $db->limitQuery('select * from ADOXYZ where id>0 order by id',$i=3,$top=3); 01478 $i2 = $i; 01479 if ($rs && !$rs->EOF) { 01480 01481 while (!is_object($rs->fetchInto($arr))) { 01482 $i2++; 01483 01484 // print_r($arr); 01485 // print "$i ";print_r($arr); 01486 if ($arr[0] != $i2) { 01487 print "<p><b>PEAR DB emulation error 2.</b></p>"; 01488 $pear = false; 01489 break; 01490 } 01491 } 01492 $rs->Close(); 01493 } 01494 if ($i2 != $i+$top) { 01495 print "<p><b>PEAR DB emulation error 2.1 EOF (correct=$i+$top, actual=$i2)</b></p>"; 01496 $pear = false; 01497 } 01498 } 01499 if ($pear) print "<p>PEAR DB emulation passed.</p>"; 01500 flush(); 01501 01502 01503 $rs = $db->SelectLimit("select ".$db->sysDate." from ADOXYZ",1); 01504 $date = $rs->fields[0]; 01505 if (!$date) Err("Bad sysDate"); 01506 else { 01507 $ds = $db->UserDate($date,"d m Y"); 01508 if ($ds != date("d m Y")) Err("Bad UserDate: ".$ds.' expected='.date("d m Y")); 01509 else echo "Passed UserDate: $ds<p>"; 01510 } 01511 $db->debug=1; 01512 if ($db->dataProvider == 'oci8') 01513 $rs = $db->SelectLimit("select to_char(".$db->sysTimeStamp.",'YYYY-MM-DD HH24:MI:SS') from ADOXYZ",1); 01514 else 01515 $rs = $db->SelectLimit("select ".$db->sysTimeStamp." from ADOXYZ",1); 01516 $date = $rs->fields[0]; 01517 if (!$date) Err("Bad sysTimeStamp"); 01518 else { 01519 $ds = $db->UserTimeStamp($date,"H \\h\\r\\s-d m Y"); 01520 if ($ds != date("H \\h\\r\\s-d m Y")) Err("Bad UserTimeStamp: ".$ds.", correct is ".date("H \\h\\r\\s-d m Y")); 01521 else echo "Passed UserTimeStamp: $ds<p>"; 01522 01523 $date = 100; 01524 $ds = $db->UserTimeStamp($date,"H \\h\\r\\s-d m Y"); 01525 $ds2 = date("H \\h\\r\\s-d m Y",$date); 01526 if ($ds != $ds2) Err("Bad UserTimeStamp 2: $ds: $ds2"); 01527 else echo "Passed UserTimeStamp 2: $ds<p>"; 01528 } 01529 flush(); 01530 01531 if ($db->hasTransactions) { 01532 $db->debug=1; 01533 echo "<p>Testing StartTrans CompleteTrans</p>"; 01534 $db->raiseErrorFn = false; 01535 01536 $db->SetTransactionMode('SERIALIZABLE'); 01537 $db->StartTrans(); 01538 $rs = $db->Execute('select * from notable'); 01539 $db->StartTrans(); 01540 $db->BeginTrans(); 01541 $db->Execute("update ADOXYZ set firstname='Carolx' where id=1"); 01542 $db->CommitTrans(); 01543 $db->CompleteTrans(); 01544 $rez = $db->CompleteTrans(); 01545 $db->SetTransactionMode(''); 01546 $db->debug=0; 01547 if ($rez !== false) { 01548 if (is_null($rez)) Err("Error: _transOK not modified"); 01549 else Err("Error: CompleteTrans (1) should have failed"); 01550 } else { 01551 $name = $db->GetOne("Select firstname from ADOXYZ where id=1"); 01552 if ($name == "Carolx") Err("Error: CompleteTrans (2) should have failed"); 01553 else echo "<p> -- Passed StartTrans test1 - rolling back</p>"; 01554 } 01555 01556 $db->StartTrans(); 01557 $db->BeginTrans(); 01558 $db->Execute("update ADOXYZ set firstname='Carolx' where id=1"); 01559 $db->RollbackTrans(); 01560 $rez = $db->CompleteTrans(); 01561 if ($rez !== true) Err("Error: CompleteTrans (1) should have succeeded"); 01562 else { 01563 $name = $db->GetOne("Select firstname from ADOXYZ where id=1"); 01564 if (trim($name) != "Carolx") Err("Error: CompleteTrans (2) should have succeeded, returned name=$name"); 01565 else echo "<p> -- Passed StartTrans test2 - commiting</p>"; 01566 } 01567 } 01568 flush(); 01569 $saved = $db->debug; 01570 $db->debug=1; 01571 $cnt = _adodb_getcount($db, 'select * from ADOXYZ where firstname in (select firstname from ADOXYZ)'); 01572 echo "<b>Count=</b> $cnt"; 01573 $db->debug=$saved; 01574 01575 global $TESTERRS; 01576 $debugerr = true; 01577 01578 global $ADODB_LANG;$ADODB_LANG = 'fr'; 01579 $db->debug = false; 01580 $TESTERRS = 0; 01581 $db->raiseErrorFn = 'adodb_test_err'; 01582 global $ERRNO; // from adodb_test_err 01583 $db->Execute('select * from nowhere'); 01584 $metae = $db->MetaError($ERRNO); 01585 if ($metae !== DB_ERROR_NOSUCHTABLE) print "<p><b>MetaError=".$metae." wrong</b>, should be ".DB_ERROR_NOSUCHTABLE."</p>"; 01586 else print "<p>MetaError ok (".DB_ERROR_NOSUCHTABLE."): ".$db->MetaErrorMsg($metae)."</p>"; 01587 if ($TESTERRS != 1) print "<b>raiseErrorFn select nowhere failed</b><br>"; 01588 $rs = $db->Execute('select * from ADOXYZ'); 01589 if ($debugerr) print " Move"; 01590 $rs->Move(100); 01591 $rs->_queryID = false; 01592 if ($debugerr) print " MoveNext"; 01593 $rs->MoveNext(); 01594 if ($debugerr) print " $rs=false"; 01595 $rs = false; 01596 01597 flush(); 01598 01599 print "<p>SetFetchMode() tests</p>"; 01600 $db->SetFetchMode(ADODB_FETCH_ASSOC); 01601 $rs = $db->SelectLimit('select firstname from ADOXYZ',1); 01602 if (!isset($rs->fields['firstname'])) Err("BAD FETCH ASSOC"); 01603 01604 $ADODB_FETCH_MODE = ADODB_FETCH_NUM; 01605 $rs = $db->SelectLimit('select firstname from ADOXYZ',1); 01606 //var_dump($rs->fields); 01607 if (!isset($rs->fields['firstname'])) Err("BAD FETCH ASSOC"); 01608 01609 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 01610 $db->SetFetchMode(ADODB_FETCH_NUM); 01611 $rs = $db->SelectLimit('select firstname from ADOXYZ',1); 01612 if (!isset($rs->fields[0])) Err("BAD FETCH NUM"); 01613 01614 flush(); 01615 01616 print "<p>Test MetaTables again with SetFetchMode()</p>"; 01617 $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 01618 $db->SetFetchMode(ADODB_FETCH_ASSOC); 01619 print_r($db->MetaTables()); 01620 print "<p>"; 01621 01623 01624 print "<p>Testing Bad Connection</p>"; 01625 flush(); 01626 01627 if (true || PHP_VERSION < 5) { 01628 if ($db->dataProvider == 'odbtp') $db->databaseType = 'odbtp'; 01629 $conn = NewADOConnection($db->databaseType); 01630 $conn->raiseErrorFn = 'adodb_test_err'; 01631 if (1) $conn->PConnect('abc','baduser','badpassword'); 01632 if ($TESTERRS == 2) print "raiseErrorFn tests passed<br>"; 01633 else print "<b>raiseErrorFn tests failed ($TESTERRS)</b><br>"; 01634 01635 flush(); 01636 } 01638 01639 global $nocountrecs; 01640 01641 if (isset($nocountrecs) && $ADODB_COUNTRECS) err("Error: \$ADODB_COUNTRECS is set"); 01642 if (empty($nocountrecs) && $ADODB_COUNTRECS==false) err("Error: \$ADODB_COUNTRECS is not set"); 01643 01644 flush(); 01645 ?> 01646 </p> 01647 <table width=100% ><tr><td bgcolor=beige> </td></tr></table> 01648 </p></form> 01649 <?php 01650 01651 if ($rs1) $rs1->Close(); 01652 if ($rs2) $rs2->Close(); 01653 if ($rs) $rs->Close(); 01654 $db->Close(); 01655 01656 if ($db->transCnt != 0) Err("Error in transCnt=$db->transCnt (should be 0)"); 01657 01658 01659 printf("<p>Total queries=%d; total cached=%d</p>",$EXECS+$CACHED, $CACHED); 01660 flush(); 01661 } 01662 01663 function adodb_test_err($dbms, $fn, $errno, $errmsg, $p1=false, $p2=false) 01664 { 01665 global $TESTERRS,$ERRNO; 01666 01667 $ERRNO = $errno; 01668 $TESTERRS += 1; 01669 print "<i>** $dbms ($fn): errno=$errno errmsg=$errmsg ($p1,$p2)</i><br>"; 01670 } 01671 01672 //-------------------------------------------------------------------------------------- 01673 01674 01675 @set_time_limit(240); // increase timeout 01676 01677 include("../tohtml.inc.php"); 01678 include("../adodb.inc.php"); 01679 include("../rsfilter.inc.php"); 01680 01681 /* White Space Check */ 01682 01683 if (isset($_SERVER['argv'][1])) { 01684 //print_r($_SERVER['argv']); 01685 $_GET[$_SERVER['argv'][1]] = 1; 01686 } 01687 01688 if (@$_SERVER['COMPUTERNAME'] == 'TIGRESS') { 01689 CheckWS('mysqlt'); 01690 CheckWS('postgres'); 01691 CheckWS('oci8po'); 01692 01693 CheckWS('firebird'); 01694 CheckWS('sybase'); 01695 if (!ini_get('safe_mode')) CheckWS('informix'); 01696 01697 CheckWS('ado_mssql'); 01698 CheckWS('ado_access'); 01699 CheckWS('mssql'); 01700 01701 CheckWS('vfp'); 01702 CheckWS('sqlanywhere'); 01703 CheckWS('db2'); 01704 CheckWS('access'); 01705 CheckWS('odbc_mssql'); 01706 CheckWS('firebird15'); 01707 // 01708 CheckWS('oracle'); 01709 CheckWS('proxy'); 01710 CheckWS('fbsql'); 01711 print "White Space Check complete<p>"; 01712 } 01713 if (sizeof($_GET) == 0) $testmysql = true; 01714 01715 01716 foreach($_GET as $k=>$v) { 01717 //global $$k; 01718 $$k = $v; 01719 } 01720 01721 ?> 01722 <html> 01723 <title>ADODB Testing</title> 01724 <body bgcolor=white> 01725 <H1>ADODB Test</H1> 01726 01727 This script tests the following databases: Interbase, Oracle, Visual FoxPro, Microsoft Access (ODBC and ADO), MySQL, MSSQL (ODBC, native, ADO). 01728 There is also support for Sybase, PostgreSQL.</p> 01729 For the latest version of ADODB, visit <a href=http://adodb.sourceforge.net/>adodb.sourceforge.net</a>.</p> 01730 01731 Test <a href=test4.php>GetInsertSQL/GetUpdateSQL</a> 01732 <a href=testsessions.php>Sessions</a> 01733 <a href=testpaging.php>Paging</a> 01734 <a href=test-perf.php>Perf Monitor</a><p> 01735 <?php 01736 01737 01738 include_once('../adodb-time.inc.php'); 01739 if (isset($_GET['time'])) adodb_date_test(); 01740 flush(); 01741 01742 include_once('./testdatabases.inc.php'); 01743 01744 echo "<br>vers=",ADOConnection::Version(); 01745 01746 01747 01748 ?> 01749 <p><i>ADODB Database Library (c) 2000-2011 John Lim. All rights reserved. Released under BSD and LGPL, PHP <?php echo PHP_VERSION ?>.</i></p> 01750 </body> 01751 </html>