如果您需要连接到Access数据库(服务器上,使用IIS或APACHE用户帐户),以下代码可以帮助简化此过程。之所以这样编写,是因为我们同时拥有MySQL和Access数据库,需要能够在两者之间切换。runQuery函数将返回一个二维数组,可以使用列名或数字作为内部数组的索引。外部数组始终使用整数索引。我们还发现Access数据库会保持打开状态并从7MB增长到2.5GB,时长仅为两小时,因此我们每次运行查询时都会打开和关闭它。如果这不是一个SELECT查询,它将返回TRUE。如果它因错误而失败,它将返回false。
我们主要只对MySQL使用showErr标志,因为您可以输出MySQL错误而无需PHP错误。Access似乎不那么友好。
<?php
function runQuery(&$conn,
$strSQL,
$associative=true,
$debug=false,
$showSQL=false,
$showErr=false) {
return runMSQuery($conn,$strSQL,$associative,$debug,$showSQL,$showErr);
}
function openMSDB($dbfile="c:/path/and/filename.mdb") {
if (!@$conn = new COM("ADODB.Connection"))
exit("无法创建ADODB连接<br>");
$strConn = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".$dbfile;
@$conn->open($strConn);
if($conn->State == 0) return false;
return $conn;
}
function closeMSDB(&$conn) {
@$conn->Close();
$conn = null;
return true;
}
function runMSQuery(&$conn,
$strSQL,
$associative=true,
$debug=false,
$showSQL=false,
$showErr=false) {
if(!is_object($conn)) if(!$conn=openMSDB()) return false;
if( $showSQL || $debug ) echo $strSQL."\n<br>\n";
$rtn = false;
if($debug) $rs = $conn->execute($strSQL);
else $rs = @$conn->execute($strSQL);
if(!$rs) {
if($showErr) echo "SQL执行错误。<br>\n";
closeMSDB($conn);
return false;
}
if ($rs->State == 0) {
closeMSDB($conn);
return true;
} else {
$rows=0;
while(!$rs->EOF) {
for($i=0;$i<$rs->Fields->count;$i++) {
$rsf = $rs->Fields($i);
if($associative) $rtn[$rows][$rsf->Name] = $rsf->value;
else $rtn[$rows][$i] = $rsf->value;
}
$rows++;
$rs->MoveNext();
}
if($rs->State != 0) $rs->Close();
$rs = null;
}
if($debug) var_dump($rtn);
closeMSDB($conn);
return $rtn;
}
?>