?? test.php
字號:
<?php
/*
V4.80 8 Mar 2006 (c) 2000-2007 John Lim (jlim#natsoft.com.my). All rights reserved.
Released under both BSD license and Lesser GPL library license.
Whenever there is any discrepancy between the two licenses,
the BSD license will take precedence.
Set tabs to 4 for best viewing.
Latest version is available at http://adodb.sourceforge.net
*/
if (!defined('E_STRICT')) define('E_STRICT',0);
error_reporting(E_ALL|E_STRICT);
$ADODB_FLUSH = true;
define('ADODB_ASSOC_CASE',0);
function getmicrotime()
{
$t = microtime();
$t = explode(' ',$t);
return (float)$t[1]+ (float)$t[0];
}
if (PHP_VERSION < 5) include_once('../adodb-pear.inc.php');
//--------------------------------------------------------------------------------------
//define('ADODB_ASSOC_CASE',1);
//
function Err($msg)
{
print "<b>$msg</b><br>";
flush();
}
function CheckWS($conn)
{
global $ADODB_EXTENSION;
include_once('../session/adodb-session.php');
if (defined('CHECKWSFAIL')){ echo " TESTING $conn ";flush();}
$saved = $ADODB_EXTENSION;
$db = ADONewConnection($conn);
$ADODB_EXTENSION = $saved;
if (headers_sent()) {
print "<p><b>White space detected in adodb-$conn.inc.php or include file...</b></p>";
//die();
}
}
function do_strtolower(&$arr)
{
foreach($arr as $k => $v) {
if (is_object($v)) $arr[$k] = adodb_pr($v,true);
else $arr[$k] = strtolower($v);
}
}
function CountExecs($db, $sql, $inputarray)
{
global $EXECS; $EXECS++;
}
function CountCachedExecs($db, $secs2cache, $sql, $inputarray)
{
global $CACHED; $CACHED++;
}
// the table creation code is specific to the database, so we allow the user
// to define their own table creation stuff
function testdb(&$db,$createtab="create table ADOXYZ (id int, firstname char(24), lastname char(24), created date)")
{
GLOBAL $ADODB_vers,$ADODB_CACHE_DIR,$ADODB_FETCH_MODE,$ADODB_COUNTRECS;
//adodb_pr($db);
?> <form method=GET>
</p>
<table width=100% ><tr><td bgcolor=beige> </td></tr></table>
</p>
<?php
$create =false;
/*$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$rs = $db->Execute('select lastname,firstname,lastname,id from ADOXYZ');
$arr = $rs->GetAssoc();
echo "<pre>";print_r($arr);
die();*/
if (!$db) die("testdb: database not inited");
GLOBAL $EXECS, $CACHED;
$EXECS = 0;
$CACHED = 0;
//$db->Execute("drop table adodb_logsql");
if ((rand()%3) == 0) @$db->Execute("delete from adodb_logsql");
$db->debug=1;
$db->fnExecute = 'CountExecs';
$db->fnCacheExecute = 'CountCachedExecs';
if (empty($_GET['nolog'])) {
echo "<h3>SQL Logging enabled</h3>";
$db->LogSQL();/*
$sql =
"SELECT t1.sid, t1.sid, t1.title, t1.hometext, t1.notes, t1.aid, t1.informant,
t2.url, t2.email, t1.catid, t3.title, t1.topic, t4.topicname, t4.topicimage,
t4.topictext, t1.score, t1.ratings, t1.counter, t1.comments, t1.acomm
FROM `nuke_stories` `t1`, `nuke_authors` `t2`, `nuke_stories_cat` `t3`, `nuke_topics` `t4`
WHERE ((t2.aid=t1.aid) AND (t3.catid=t1.catid) AND (t4.topicid=t1.topic)
AND ((t1.alanguage='german') OR (t1.alanguage='')) AND (t1.ihome='0'))
ORDER BY t1.time DESC";
$db->SelectLimit($sql);
echo $db->ErrorMsg();*/
}
$ADODB_CACHE_DIR = dirname(TempNam('/tmp','testadodb'));
$db->debug = false;
//print $db->UnixTimeStamp('2003-7-22 23:00:00');
$phpv = phpversion();
if (defined('ADODB_EXTENSION')) $ext = ' Extension '.ADODB_EXTENSION.' installed';
else $ext = '';
print "<h3>ADODB Version: $ADODB_vers Host: <i>$db->host</i> Database: <i>$db->database</i> PHP: $phpv $ext</h3>";
flush();
if (function_exists('date_default_timezone_set')) date_default_timezone_set('Asia/Kuala_Lumpur');
$arr = $db->ServerInfo();
print_r($arr);
echo E_ALL,' ',E_STRICT, "<br>";
$e = error_reporting(E_ALL | E_STRICT);
echo error_reporting(),'<p>';
flush();
#$db->debug=1;
$tt = $db->Time();
if ($tt == 0) echo '<br><b>$db->Time failed</b>';
else echo "<br>db->Time: ".date('d-m-Y H:i:s',$tt);
echo '<br>';
echo "Date=",$db->UserDate('2002-04-07'),'<br>';
print "<i>date1</i> (1969-02-20) = ".$db->DBDate('1969-2-20');
print "<br><i>date1</i> (1999-02-20) = ".$db->DBDate('1999-2-20');
print "<br><i>date1.1</i> 1999 = ".$db->DBDate("'1999'");
print "<br><i>date2</i> (1970-1-2) = ".$db->DBDate(24*3600)."<p>";
print "<i>ts1</i> (1999-02-20 13:40:50) = ".$db->DBTimeStamp('1999-2-20 1:40:50 pm');
print "<br><i>ts1.1</i> (1999-02-20 13:40:00) = ".$db->DBTimeStamp('1999-2-20 13:40');
print "<br><i>ts2</i> (1999-02-20) = ".$db->DBTimeStamp('1999-2-20');
print "<br><i>ts3</i> (1970-1-2 +/- timezone) = ".$db->DBTimeStamp(24*3600);
print "<br> Fractional TS (1999-2-20 13:40:50.91): ".$db->DBTimeStamp($db->UnixTimeStamp('1999-2-20 13:40:50.91+1'));
$dd = $db->UnixDate('1999-02-20');
print "<br>unixdate</i> 1999-02-20 = ".date('Y-m-d',$dd)."<p>";
print "<br><i>ts4</i> =".($db->UnixTimeStamp("19700101000101")+8*3600);
print "<br><i>ts5</i> =".$db->DBTimeStamp($db->UnixTimeStamp("20040110092123"));
print "<br><i>ts6</i> =".$db->UserTimeStamp("20040110092123");
print "<br><i>ts7</i> =".$db->DBTimeStamp("20040110092123");
flush();
// mssql too slow in failing bad connection
if (false && $db->databaseType != 'mssql') {
print "<p>Testing bad connection. Ignore following error msgs:<br>";
$db2 = ADONewConnection();
$rez = $db2->Connect("bad connection");
$err = $db2->ErrorMsg();
print "<i>Error='$err'</i></p>";
if ($rez) print "<b>Cannot check if connection failed.</b> The Connect() function returned true.</p>";
}
#error_reporting($e);
flush();
//$ADODB_COUNTRECS=false;
$rs=$db->Execute('select * from ADOXYZ order by id');
if($rs === false) $create = true;
else $rs->Close();
//if ($db->databaseType !='vfp') $db->Execute("drop table ADOXYZ");
if ($create) {
if (false && $db->databaseType == 'ibase') {
print "<b>Please create the following table for testing:</b></p>$createtab</p>";
return;
} else {
$db->debug = 99;
# $e = error_reporting(E_ALL-E_WARNING);
$db->Execute($createtab);
# error_reporting($e);
}
}
#error_reporting(E_ALL);
echo "<p>Testing Metatypes</p>";
$t = $db->MetaType('varchar');
if ($t != 'C') Err("Bad Metatype for varchar");
$rs = $db->Execute("delete from ADOXYZ"); // some ODBC drivers will fail the drop so we delete
if ($rs) {
if(! $rs->EOF) print "<b>Error: </b>RecordSet returned by Execute('delete...') should show EOF</p>";
$rs->Close();
} else print "err=".$db->ErrorMsg();
print "<p>Test select on empty table, FetchField when EOF, and GetInsertSQL</p>";
$rs = $db->Execute("select id,firstname from ADOXYZ where id=9999");
if ($rs && !$rs->EOF) print "<b>Error: </b>RecordSet returned by Execute(select...') on empty table should show EOF</p>";
if ($rs->EOF && (($ox = $rs->FetchField(0)) && !empty($ox->name))) {
$record['id'] = 99;
$record['firstname'] = 'John';
$sql = $db->GetInsertSQL($rs, $record);
if (strtoupper($sql) != strtoupper("INSERT INTO ADOXYZ ( id, firstname ) VALUES ( 99, 'John' )")) Err("GetInsertSQL does not work on empty table: $sql");
} else {
Err("FetchField does not work on empty recordset, meaning GetInsertSQL will fail...");
}
if ($rs) $rs->Close();
flush();
//$db->debug=true;
print "<p>Testing Commit: ";
$time = $db->DBDate(time());
if (!$db->BeginTrans()) {
print '<b>Transactions not supported</b></p>';
if ($db->hasTransactions) Err("hasTransactions should be false");
} else { /* COMMIT */
if (!$db->hasTransactions) Err("hasTransactions should be true");
if ($db->transCnt != 1) Err("Invalid transCnt = $db->transCnt (should be 1)");
$rs = $db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (99,'Should Not','Exist (Commit)',$time)");
if ($rs && $db->CommitTrans()) {
$rs->Close();
$rs = $db->Execute("select * from ADOXYZ where id=99");
if ($rs === false || $rs->EOF) {
print '<b>Data not saved</b></p>';
$rs = $db->Execute("select * from ADOXYZ where id=99");
print_r($rs);
die();
} else print 'OK</p>';
if ($rs) $rs->Close();
} else {
if (!$rs) {
print "<b>Insert failed</b></p>";
$db->RollbackTrans();
} else print "<b>Commit failed</b></p>";
}
if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)");
/* ROLLBACK */
if (!$db->BeginTrans()) print "<p><b>Error in BeginTrans</b>()</p>";
print "<p>Testing Rollback: ";
$db->Execute("insert into ADOXYZ (id,firstname,lastname,created) values (100,'Should Not','Exist (Rollback)',$time)");
if ($db->RollbackTrans()) {
$rs = $db->Execute("select * from ADOXYZ where id=100");
if ($rs && !$rs->EOF) print '<b>Fail: Data should rollback</b></p>';
else print 'OK</p>';
if ($rs) $rs->Close();
} else
print "<b>Commit failed</b></p>";
$rs = $db->Execute('delete from ADOXYZ where id>50');
if ($rs) $rs->Close();
if ($db->transCnt != 0) Err("Invalid transCnt = $db->transCnt (should be 0)");
}
if (1) {
print "<p>Testing MetaDatabases()</p>";
print_r( $db->MetaDatabases());
print "<p>Testing MetaTables() and MetaColumns()</p>";
$a = $db->MetaTables();
if ($a===false) print "<b>MetaTables not supported</b></p>";
else {
print "Array of tables and views: ";
foreach($a as $v) print " ($v) ";
print '</p>';
}
$a = $db->MetaTables('VIEW');
if ($a===false) print "<b>MetaTables not supported (views)</b></p>";
else {
print "Array of views: ";
foreach($a as $v) print " ($v) ";
print '</p>';
}
$a = $db->MetaTables(false,false,'aDo%');
if ($a===false) print "<b>MetaTables not supported (mask)</b></p>";
else {
print "Array of ado%: ";
foreach($a as $v) print " ($v) ";
print '</p>';
}
$a = $db->MetaTables('TABLE');
if ($a===false) print "<b>MetaTables not supported</b></p>";
else {
print "Array of tables: ";
foreach($a as $v) print " ($v) ";
print '</p>';
}
$db->debug=0;
$rez = $db->MetaColumns("NOSUCHTABLEHERE");
if ($rez !== false) {
Err("MetaColumns error handling failed");
var_dump($rez);
}
$db->debug=1;
$a = $db->MetaColumns('ADOXYZ');
if ($a===false) print "<b>MetaColumns not supported</b></p>";
else {
print "<p>Columns of ADOXYZ: <font size=1><br>";
foreach($a as $v) {print_r($v); echo "<br>";}
echo "</font>";
}
print "<p>Testing MetaIndexes</p>";
$a = $db->MetaIndexes(('ADOXYZ'),true);
if ($a===false) print "<b>MetaIndexes not supported</b></p>";
else {
print "<p>Indexes of ADOXYZ: <font size=1><br>";
adodb_pr($a);
echo "</font>";
}
print "<p>Testing MetaPrimaryKeys</p>";
$a = $db->MetaPrimaryKeys('ADOXYZ');
var_dump($a);
}
$rs = $db->Execute('delete from ADOXYZ');
if ($rs) $rs->Close();
$db->debug = false;
switch ($db->databaseType) {
case 'vfp':
if (0) {
// memo test
$rs = $db->Execute("select data from memo");
rs2html($rs);
}
break;
case 'postgres7':
case 'postgres64':
case 'postgres':
case 'ibase':
print "<p>Encode=".$db->BlobEncode("abc\0d\"'
ef")."</p>";//'
print "<p>Testing Foreign Keys</p>";
$arr = $db->MetaForeignKeys('ADOXYZ',false,true);
print_r($arr);
if (!$arr) Err("No MetaForeignKeys");
break;
case 'odbc_mssql':
case 'mssqlpo':
print "<p>Testing Foreign Keys</p>";
$arr = $db->MetaForeignKeys('Orders',false,true);
print_r($arr);
if (!$arr) Err("Bad MetaForeignKeys");
if ($db->databaseType == 'odbc_mssql') break;
case 'mssql':
/*
ASSUME Northwind available...
CREATE PROCEDURE SalesByCategory
@CategoryName nvarchar(15), @OrdYear nvarchar(4) = '1998'
AS
IF @OrdYear != '1996' AND @OrdYear != '1997' AND @OrdYear != '1998'
BEGIN
SELECT @OrdYear = '1998'
END
SELECT ProductName,
TotalPurchase=ROUND(SUM(CONVERT(decimal(14,2), OD.Quantity * (1-OD.Discount) * OD.UnitPrice)), 0)
FROM [Order Details] OD, Orders O, Products P, Categories C
WHERE OD.OrderID = O.OrderID
AND OD.ProductID = P.ProductID
AND P.CategoryID = C.CategoryID
AND C.CategoryName = @CategoryName
AND SUBSTRING(CONVERT(nvarchar(22), O.OrderDate, 111), 1, 4) = @OrdYear
GROUP BY ProductName
ORDER BY ProductName
GO
CREATE PROCEDURE ADODBTestSP
@a nvarchar(25)
AS
SELECT GETDATE() AS T, @a AS A
GO
*/
print "<h4>Testing Stored Procedures for mssql</h4>";
$saved = $db->debug;
$db->debug=true;
$assoc = $ADODB_FETCH_MODE;
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$cmd = $db->PrepareSP('ADODBTestSP');
$ss = "You should see me in the output.";
$db->InParameter($cmd,$ss,'a');
$rs = $db->Execute($cmd);
#var_dump($rs->fields);
echo $rs->fields['T']." --- ".$rs->fields['A']."---<br>";
$cat = 'Dairy Products';
$yr = '1998';
$stmt = $db->PrepareSP('SalesByCategory');
$db->InParameter($stmt,$cat,'CategoryName');
$db->InParameter($stmt,$yr,'OrdYear');
$rs = $db->Execute($stmt);
rs2html($rs);
$cat = 'Grains/Cereals';
$yr = 1998;
$stmt = $db->PrepareSP('SalesByCategory');
$db->InParameter($stmt,$cat,'CategoryName');
$db->InParameter($stmt,$yr,'OrdYear');
$rs = $db->Execute($stmt);
rs2html($rs);
$ADODB_FETCH_MODE = $assoc;
/*
Test out params - works in PHP 4.2.3 and 4.3.3 and 4.3.8 but not 4.3.0:
CREATE PROCEDURE at_date_interval
@days INTEGER,
@start VARCHAR(20) OUT,
@end VARCHAR(20) OUT
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -