如果你需要连接到 Access 数据库(在服务器上,使用 IIS 或 APACHE 用户帐户),以下代码可以帮助简化流程。这样编写是因为我们同时拥有 MySQL 和 Access 数据库,需要能够在两者之间切换。runQuery 函数将返回一个二维数组,可以使用列名称或数字作为内部数组的索引。外部数组总是使用整数索引。我们还发现 Access 会保持打开状态并在一两个小时内从 7MB 增长到 2.5GB,因此我们每次运行查询时都会打开和关闭它。如果它不是一个 select 查询,它将返回 TRUE。如果它因错误而失败,它将返回 false。
有一个 showErr 标志,我们主要只在 MySQL 中使用它,因为你可以在没有 PHP 错误的情况下输出 MySQL 错误。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;
}
?>