如果您需要連線到 Access 資料庫 (在伺服器上,使用 IIS 或 APACHE 使用者帳戶),以下程式碼可以幫助您簡化此流程。這樣撰寫的原因是,我們同時有 MySQL 和 Access 資料庫,需要能夠來回切換。 `runQuery` 函式會傳回一個二維陣列,並且可以使用欄位名稱或數字作為內部陣列的索引。外部陣列永遠以整數索引。我們也發現 Access 會保持開啟狀態,並在兩小時內從 7MB 增加到 2.5GB 的問題,因此我們每次執行查詢時都會開啟並關閉它。如果它不是 SELECT 查詢,它會傳回 TRUE。如果發生錯誤而失敗,它會傳回 false。
有一個 `showErr` 旗標,我們大多只用於 MySQL,因為您可以輸出 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;
}
?>