⑴ php能不能直接讀寫mdb文件要怎麼做詳細的。
以下為幾個php連接access資料庫和操作acess數據的方法,全部州空睜做成了類,應用起來也更方便,也可摘用其中的部分代碼應用。
<?php
--------------------------------------------------------------------
//FileName:class.php
//Summary: Access資料庫操作類
// 使用範例:
//$databasepath="database.mdb";
//$dbusername="";
//$dbpassword="";
//include_once("class.php");
//$access=new Access($databasepath,$dbusername,$dbpassword);
--------------------------------------------------------------------
class Access
{
var $databasepath,$constr,$dbusername,$dbpassword,$link;
function Access($databasepath,$dbusername,$dbpassword)
{
$this->databasepath=$databasepath;
$this->username=$dbusername;
$this->password=$dbpassword;
$this->connect();
}
function connect()
{
$this->constr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath($this->databasepath);
$this->link=odbc_connect($this->constr,$this->username,$this->password,SQL_CUR_USE_ODBC);
return $this->link;
//if($this->link) echo "恭喜你虧瞎,資料庫連接成功!";
//else echo "資料庫連冊歲接失敗!";
}
function query($sql)
{
return @odbc_exec($this->link,$sql);
}
function first_array($sql)
{
return odbc_fetch_array($this->query($sql));
}
function fetch_row($query)
{
return odbc_fetch_row($query);
}
function total_num($sql)//取得記錄總數
{
return odbc_num_rows($this->query($sql));
}
function close()//關閉資料庫連接函數
{
odbc_close($this->link);
}
function insert($table,$field)//插入記錄函數
{
$temp=explode(',',$field);
$ins='';
for ($i=0;$i<count($temp);$i++)
{
$ins.="'".$_POST[$temp[$i]]."',";
}
$ins=substr($ins,0,-1);
$sql="INSERT INTO ".$table." (".$field.") VALUES (".$ins.")";
$this->query($sql);
}
function getinfo($table,$field,$id,$colnum)//取得當條記錄詳細信息
{
$sql="SELECT * FROM ".$table." WHERE ".$field."=".$id."";
$query=$this->query($sql);
if($this->fetch_row($query))
{
for ($i=1;$i<$colnum;$i++)
{
$info[$i]=odbc_result($query,$i);
}
}
return $info;
}
function getlist($table,$field,$colnum,$condition,$sort="ORDER BY id DESC")//取得記錄列表
{
$sql="SELECT * FROM ".$table." ".$condition." ".$sort;
$query=$this->query($sql);
$i=0;
while ($this->fetch_row($query))
{
$recordlist[$i]=getinfo($table,$field,odbc_result($query,1),$colnum);
$i++;
}
return $recordlist;
}
function getfieldlist($table,$field,$fieldnum,$condition="",$sort="")//取得記錄列表
{
$sql="SELECT ".$field." FROM ".$table." ".$condition." ".$sort;
$query=$this->query($sql);
$i=0;
while ($this->fetch_row($query))
{
for ($j=0;$j<$fieldnum;$j++)
{
$info[$j]=odbc_result($query,$j+1);
}
$rdlist[$i]=$info;
$i++;
}
return $rdlist;
}
function updateinfo($table,$field,$id,$set)//更新記錄
{
$sql="UPDATE ".$table." SET ".$set." WHERE ".$field."=".$id;
$this->query($sql);
}
function deleteinfo($table,$field,$id)//刪除記錄
{
$sql="DELETE FROM ".$table." WHERE ".$field."=".$id;
$this->query($sql);
}
function deleterecord($table,$condition)//刪除指定條件的記錄
{
$sql="DELETE FROM ".$table." WHERE ".$condition;
$this->query($sql);
}
function getcondrecord($table,$condition="")// 取得指定條件的記錄數
{
$sql="SELECT COUNT(*) AS num FROM ".$table." ".$condition;
$query=$this->query($sql);
$this->fetch_row($query);
$num=odbc_result($query,1);
return $num;
}
}
?>
22222222
class.php文件:
[php]
<?php
class Access//Access資料庫操作類
{
var $databasepath,$constr,$dbusername,$dbpassword,$link;//類的屬性
function Access($databasepath,$dbusername,$dbpassword)//構造函數
{
$this->databasepath=$databasepath;
$this->username=$dbusername;
$this->password=$dbpassword;
$this->connect();
}
function connect()//資料庫連接函數
{
$this->constr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath($this->databasepath);
$this->link=odbc_connect($this->constr,$this->username,$this->password,SQL_CUR_USE_ODBC);
return $this->link;
//if($this->link) echo "恭喜你,資料庫連接成功!";
//else echo "資料庫連接失敗!";
}
function query($sql)//送一個查詢字元串到資料庫中
{
return @odbc_exec($this->link,$sql);
}
function first_array($sql)//從access資料庫中返回一個數組
{
return @odbc_fetch_array($this->query($sql));
}
function fetch_row($query)//返回記錄中的一行
{
return odbc_fetch_row($query);
}
function total_num($sql)//取得記錄總數
{
return odbc_num_rows($this->query($sql));
}
function close()//關閉資料庫連接函數
{
odbc_close($this->link);
}
function insert($table,$field)//插入記錄函數
{
$temp=explode(',',$field);
$ins='';
for ($i=0;$i {
$ins.="'".$_POST[$temp[$i]]."',";
}
$ins=substr($ins,0,-1);
$sql="INSERT INTO ".$table." (".$field.") VALUES (".$ins.")";
$this->query($sql);
}
function getinfo($table,$field,$id,$colnum)//取得當條記錄詳細信息
{
$sql="SELECT * FROM ".$table." WHERE ".$field."=".$id."";
$query=$this->query($sql);
if($this->fetch_row($query))
{
for ($i=1;$i<$colnum;$i++)
{
$info[$i]=odbc_result($query,$i);
}
}
return $info;
}
function getlist($table,$field,$colnum,$condition,$sort="ORDER BY id DESC")//取得記錄列表
{
$sql="SELECT * FROM ".$table." ".$condition." ".$sort;
$query=$this->query($sql);
$i=0;
while ($this->fetch_row($query))
{
$recordlist[$i]=getinfo($table,$field,odbc_result($query,1),$colnum);
$i++;
}
return $recordlist;
}
function getfieldlist($table,$field,$fieldnum,$condition="",$sort="")//取得記錄列表
{
$sql="SELECT ".$field." FROM ".$table." ".$condition." ".$sort;
$query=$this->query($sql);
$i=0;
while ($this->fetch_row($query))
{
for ($j=0;$j<$fieldnum;$j++)
{
$info[$j]=odbc_result($query,$j+1);
}
$rdlist[$i]=$info;
$i++;
}
return $rdlist;
}
function updateinfo($table,$field,$id,$set)//更新記錄函數
{
$sql="UPDATE ".$table." SET ".$set." WHERE ".$field."=".$id;
$this->query($sql);
}
function deleteinfo($table,$field,$id)//刪除記錄函數
{
$sql="DELETE FROM ".$table." WHERE ".$field."=".$id;
$this->query($sql);
}
function deleterecord($table,$condition)//刪除指定條件的記錄函數
{
$sql="DELETE FROM ".$table." WHERE ".$condition;
$this->query($sql);
}
function getcondrecord($table,$condition="")//取得指定條件的記錄數函數
{
$sql="SELECT COUNT(*) AS num FROM ".$table." ".$condition;
$query=$this->query($sql);
$this->fetch_row($query);
$num=odbc_result($query,1);
return $num;
}
}
?>
[/php]
資料庫連接文件:
[php]
<?php
$databasepath="data/database.mdb";//資料庫路徑
$dbusername="";//資料庫用戶名
$dbpassword="";//資料庫密碼
include_once("class.php");//調用資料庫操作類
$access=new Access($databasepath,$dbusername,$dbpassword);//新建一個資料庫操作類的對象
?>
[/php]
[php]
<?php
$sql="select * from $info where id=$id";
$result=$access->query($sql)or die("error2");
$array=odbc_fetch_array($result);
?>
[/php]
333333333333
這個是為了 同時可以使用access和mysql而做的 先弄一個mysql的 然後又寫一個access的 所有的函數一一對應 你可以看下 絕對原創喔~~
配置文件如下
$config['db']['type'] = "Mysql"; //資料庫類型「Mysql」,「Access」
$config['db']['database']= "ourcms"; //資料庫(文件)名
$config['db']['host'] = ""; //資料庫主機
$config['db']['username']= "7king"; //資料庫連接用戶名
$config['db']['password']= "tingting"; //資料庫連接密碼
/*
$config['db']['type'] = "Access"; //資料庫類型「Mysql」,「Access」
$config['db']['database']= "ourcms.mdb";//資料庫(文件)名
$config['db']['host'] = "";
$config['db']['username']= "";
$config['db']['password']= "";
<?php
/**
* 2007.04 by zhaohe
*
* php連接access通用類
*
* 用法:
* 建立new Access類 => set_db設置數據路徑 => set_login 設置連接資料庫的用戶名和密碼
* => 通過set_conn 設置連接 =>
* {
get_result 獲取查詢執行結果; get_result_rows 獲取查詢執行列表,一般是select
insert_info 插入新的記錄 update_info更新記錄
}
*
*
*/
class Access {
/**
* 類變數定義
* @param $conn mysql連接號
* @param $error 錯誤代號
* @param $username/$password 資料庫連接用戶名和密碼
* @param array $err_info 錯誤信息
*
* @param $debuginfo 調試信息
* @param $table 當前操作數據表
*/
var $conn;
var $error;
var $database;
var $username = "";
var $password = "";
var $err_info = array(
0 => "沒有錯誤!",
1 => "資料庫連接失敗!",
2 => "sql執行出錯!"
);
var $debuginfo="";
var $table;
/**
* 默認構造方法
**/
function Access( $arr=null ){
if( is_array($arr) ) {
$this->set_login( $arr['host'] , $arr['username'] , $arr['password'] );
$this->set_db( $arr['database'] );
$this->set_conn();
}
}
/**
* 設置資料庫文件名
* @param string $dbfile
*
* return void
*/
function set_db ( $dbfile ){
$this->database = $dbfile;
}
/**
* 設置連接資料庫的用戶名和密碼
* @param string $user 用戶名
* @param string $pwd 密碼
*
* @return void
*/
function set_login ( $user , $pwd ){
$this->username=$user;
$this->password=$pwd;
}
/**
* 創建資料庫連接
* @param
* return void
*/
function set_conn ( ){
if($this->conn=odbc_connect("DRIVER=Microsoft Access Driver (*.mdb);DBQ=".realpath($this->database),$this->username,$this->password,SQL_CUR_USE_ODBC )) $this->error=0;
else $this->error=1;
}
/**
* 設置當前操作的數據表
* @param string $tb
*
* @return void
*/
function set_table( $tb ) {
$this->table = $tb;
}
/**
* 返回sql查詢結果
* @param string $sql sql語句
*
* @return #id
*/
function get_result( $sql ){
return odbc_do( $this->conn , $sql );
}
/**
* 獲取查詢的結果
* @param string $sql
*
* @return array 結果的二維數組
*/
function get_result_rows( $sql ){
$array = array() ;
$result = $this->get_result( $sql );
while( $row = odbc_fetch_array( $result ) )
$array[] = $row ;
return $array;
}
/**
* 獲取部分查詢結果
*
* @param Array 數組
* @return Array
*/
function get_query_result( $cols , $tb=null , $order=null , $limit=null , $start=0 ) {
if( empty($tb) ) $tb=$this->table;
else $this->table=$tb;
if( is_array($cols) ) $col="[".implode('],[',$cols)."]";
else $col = $cols;
if( empty($limit) )
$sql = "select $col from $tb";
else
$sql ="select top $limit $col from $tb";;
if( isset($order) ) $sql.=" order by $order";
return $this->get_result_rows($sql);
}
/**
* 執行資料庫插入操作
*
* @param $arr values列表,數組索引為數據表欄位
* @param $tb 操作數據表 如果為空則為設置的當前類的操作表
*/
function insert_info( $arr , $tb = "" ) {
$cols = array_keys( $arr );
$values = array_values( $arr );
if (empty($tb)) $tb = $this->tb;
/*
foreach( $arr as $key => $value ){
$cols[] = $key;
$values[] = $value;
}
*/
$sql = "insert into [$tb]([".implode("],[",$cols)."]) values('".implode("','",$values)."')";
//return $sql;
return $this->get_result( $sql );
}
/**
* 執行資料庫更新操作
*
* @param array $arr 要更新的欄位值 數組索引為表欄位名
* @param array $con 條件數組
* @param string $tb 要操作的數據表
*
*/
function update_info( $arr , $con , $tb = "" ) {
$cols = array();
$conditions = array();
if (empty( $tb )) $tb = $this->tb;
foreach( $arr as $key => $value ){
$cols[] = "[$key]='$value'";
}
foreach( $con as $key => $value ) {
//檢查數據類型
if( is_int($value) || is_float($value) )
$conditions[] = "[$key]=$value";
else
$conditions[] = "[$key]='$value'";
}
$sql = "update [$tb] set ".implode(",",$cols)." where ".implode(" and ",$conditions);
//return $sql;
return $this->get_result( $sql );
}
}
?>
mysql的類如下
class Mysql {
/**
* mysql連接執行類,將sql的執行實現資料庫無關性
*
*
*
*/
/**
* 類變數定義
* @param $conn mysql連接號
* @param $error 錯誤代號
* @param $username/$password 資料庫連接用戶名和密碼
* @param array $err_info 錯誤信息
*
* @param $debuginfo 調試信息
* @param $table 當前操作數據表
*/
var $conn;
var $error;
var $username = "";
var $password = "";
var $host;
var $database;
var $err_info = array(
0 => "沒有錯誤!",
1 => "資料庫連接失敗!",
2 => "sql執行出錯!"
);
var $debuginfo="";
var $table;
function Mysql( $arr=null ) {
if( is_array($arr) ) {//var_mp($arr);
$this->set_login( $arr['host'] , $arr['username'] , $arr['password'] );
$this->set_db( $arr['database'] );
$this->set_conn();
if( isset($this->error) && $this->error!=0 ) die($this->err_info[$this->error]);
}
}
/**
* 設置資料庫名
* @param string $database
*
* return void
*/
function set_db ( $dbfile ){
$this->database = $dbfile;
}
/**
* 設置連接資料庫的用戶名和密碼
* @param string $user 用戶名
* @param string $pwd 密碼
*
* @return void
*/
function set_login ( $host , $user , $pwd ){
$this->host=$host;
$this->username=$user;
$this->password=$pwd;
}
/**
* 創建資料庫連接
* @param
* return void
*/
function set_conn (){
$this->conn=mysql_connect($this->host,$this->username,$this->password );
if ( isset($this->conn) && mysql_select_db($this->database) )
$this->error=0;
else
$this->error=1;
}
/**
* 設置當前操作的數據表
* @param string $tb
*
* @return void
*/
function set_table( $tb ) {
$this->table = $tb;
}
/**
* 返回sql查詢結果
* @param string $sql sql語句
*
* @return #id
*/
function get_result( $sql ){
return mysql_query( $sql , $this->conn );
}
/**
* 獲取查詢的結果
* @param string $sql
*
* @return array 結果的二維數組
*/
function get_result_rows( $sql ){
$array = array() ;
$result = $this->get_result( $sql );
while( $row = mysql_fetch_assoc( $result ) )
$array[] = $row ;
return $array;
}
/**
* 獲取部分查詢結果
*
* @param Array 數組
* @return Array
*/
function get_query_result( $cols , $tb=null , $condition , $order=null , $limit=null , $start=0 ) {
if( empty($tb) ) $tb=$this->table;
else $this->table=$tb;
if( is_array($cols) ) $col="`".implode('`,`',$cols)."`";
else $col = $cols;
if( isset($limit) )
$sql.="select top $limit $col from $tb";
else
$sql = "select $col from $tb";
if( isset($condition) ) $sql.=" where $condition";
if( isset($order) ) $sql.=" order by $order";
if( isset($limit) ) $sql.=" limit $start,$limit";
return $this->get_result_rows($sql);
}
/**
* 執行資料庫插入操作
*
* @param $arr values列表,數組索引為數據表欄位
* @param $tb 操作數據表 如果為空則為設置的當前類的操作表
*/
function insert_info( $arr , $tb = "" ) {
$cols = array_keys( $arr );
$values = array_values( $arr );
if (empty($tb)) $tb = $this->table;
/*
foreach( $arr as $key => $value ){
$cols[] = $key;
$values[] = $value;
}
*/
$sql = "insert into [$tb](`".implode("`,`",$cols)."`) values('".implode("','",$values)."')";
//return $sql;
return $this->get_result( $sql );
}
/**
* 執行資料庫更新操作
*
* @param array $arr 要更新的欄位值 數組索引為表欄位名
* @param array $con 條件數組
* @param string $tb 要操作的數據表
*
*/
function update_info( $arr , $con , $tb = "" ) {
$cols = array();
$conditions = array();
if (empty( $tb )) $tb = $this->table;
if( is_array($arr) ) {
foreach( $arr as $key => $value ){
$cols[] = "`$key`='$value'";
}
foreach( $con as $key => $value ) {
//檢查數據類型
if( is_int($value) || is_float($value) )
$conditions[] = "`$key`=$value";
else
$conditions[] = "`$key`='$value'";
}
$sql = "update `$tb` set ".implode(",",$cols)." where ".implode(" and ",$conditions);
}
else
$sql = "update `$tb` set $arr where $con";
//return $sql;
return $this->get_result( $sql );
}
}
⑵ PHP 中用ODBC連接 ACCESS 。如何循環輸出資料庫中表的數據
不知道你要的是不是這個東西,簡單這么一寫吧,有什麼問題可以再交流~~~
$conn= new com("ADODB.Connection");
$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=xxx;Uid=xxx;Pwd=xxx;");
$rs= new COM("ADODB.Recordset");
$rs->open($sql, $conn, 1, 3);
while (!$rs->eof){
echo $rs->Fields(0)->value;
echo "<br />";
}
⑶ PHP讀取Access資料庫 出亂碼
access的中文版默認是GBK格式的,是無法改變字元類型的,所以用php讀取的時候會亂碼。
解決方法是:使用iconv轉換
一、使用 iconv函數製作一個轉碼的自定義從GBK轉到UTF-8的函數,如以下代碼:
function enc($c){return iconv('gbk','utf-8',$c);}
二、為了寫入資料庫的編碼是符合資料庫需要的,所以我們還要製作一個從UTF-8轉向GBK的函數:
function dec($c){return iconv('utf-8','gb2312',$c);}
製作好了轉碼函數,接下就是正常使用了。在從資料庫裡面調數據顯示在頁面的時候使用enc()函數,從頁面提交數據到資料庫時使用dec()函數,這樣就可以很好的解決PHP使用UTF-8編碼,ACCESS使用系統默認編碼的問題了。
⑷ php Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'db_user'@'localhost'
在進行PHP資料庫操作時,可能會遇到「mysql_connect() [function.mysql-connect]: Access denied for user 'db_user'@'localhost'」的錯誤提示。這通常表示連接資料庫時,指定的用戶名或密碼不正確,或者用戶許可權不足。為了排查問題,首先需要檢查資料庫連接的相關配置,如伺服器地址、用戶名和密碼是否正確。
在示例代碼中,資料庫連接配置如下:
$hostname = "127.0.0.1"; //真正的資料庫地址
$username = "user"; //用戶名
$password = "password"; //密碼
$dbname = "database_name"; //資料庫名稱
$conn = mysql_connect($hostname, $username, $password) or die("不能連接伺服器!");
mysql_select_db("$dbname", $conn) or die("不能選擇資料庫");
為了確保代碼正確執行,需要確認以下幾點:
1. 確認資料庫伺服器是否正常運行。
2. 確認提供的資料庫用戶名和密碼是否准確。
3. 確認用戶是否具有訪問指定資料庫的許可權。
4. 檢查網路連接是否正常,確保能夠訪問到資料庫伺服器。
在實際應用中,建議使用更加安全的資料庫連接方法,如mysqli或PDO,它們提供了更高級的特性,包括預處理語句和更好的錯誤處理機制。此外,建議使用配置文件來存儲資料庫連接信息,避免直接將敏感信息寫入代碼。
解決這類問題的關鍵在於仔細檢查配置信息,確保它們與實際資料庫環境相匹配。如果問題依然存在,可以嘗試通過資料庫管理工具或命令行工具進行調試,查看具體的錯誤信息,以便進一步定位問題。
總之,遇到「Access denied」錯誤時,首先要從資料庫連接配置入手,仔細核對每一項信息,確保其正確無誤。同時,關注資料庫伺服器的狀態和網路連接情況,也是排查問題的重要環節。