php连接Access数据库错误及解决方法

前端技术 2023/09/06 PHP

php+access连接数据库常用的方式一般有两种.

推荐的代码

需要注意php获取路径用的是realpath

复制代码 代码如下:

<?php
$connstr=\"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" . realpath(\"data.mdb\");
$connid=odbc_connect($connstr,\"\",\"\",SQL_CUR_USE_ODBC);
$issuetime=date(\"Y-m-d H:i:s\");
$sql=\"insert into test values(\"\",\"\",...)\";
$result=odbc_exec($connid,$sql);
if($result) echo \"successful\";
else echo \"failed\";
?>


之二:

复制代码 代码如下:

<?PHP
//创建ADO连接
$conn = @new COM(\"ADODB.Connection\") or die (\"ADO连接失败!\");
$connstr = \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" . realpath(\"temp/TempData.mdb\");
$conn->Open($connstr);

//创建记录集查询
$rs = @new COM(\"ADODB.RecordSet\");
$rs->Open(\"select * from blog_Content\",$conn,1,3);
echo $rs->Fields[\"log_Title\"]->Value; //输出log_Title字段
echo \"<br/>\";
$rs->Movenext(); //将记录集指针下移
echo $rs->Fields[\"log_Title\"]->Value;
$rs->close();
?>


下面是补充

1.通过建立odbc驱动,再用php 的odbc_connect()函数连接.

如:

复制代码 代码如下:

$connstr=DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\".$db;
$connid=odbc_connect($connstr,\"username\",\"password\",SQL_CUR_USE_ODBC);

2.用oledb方式连接,再调用 open方法打开
如:

复制代码 代码如下:

$conn=new com(\"ADODB.connection\");
$connstr=\"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\".$db;
$conn->Open($connstr);

但这二种方法怎么连接都出错,去网上找资料,有的说是没有赋予Everyone权限,有的说是access97 和access2000的驱动不一样(就是数据库是2000建的,读取用的驱动是97的.)造成的.

经过反复测试原来是数据库的路经造成的.以前在开发asp时习惯把数据库的地址写成相对路径,再用server.mappath()函数获取他的绝对路径.

在开发php时也延续了这个习惯,用realpath加数据库的相对路径来获取数据库的地址.比如:$db=realpath(\"../db.mdb\");

但asp 的include函数和php的include函数在处理包含文件的方式似乎不同,造成了php在不同目录下包含conn.php文件连接数据库出现\"常见错误 不能打开注册表关键字\",

或Uncaught exception \'com_exception\' with message \'Source: ProviderDescription: 验证失败。\' 的错误.

现在把错误信息及解决方法整理一下贴给大家,希望别的朋友遇到这种情况不用像我这样郁闷

错误1

php连接access 数据库常见问题

复制代码 代码如下:

Warning: odbc_connect() [
function.odbc-connect
]: SQL error: [Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 \'Temporary (volatile) Jet DSN for process 0xdd0 Thread 0xcb8 DBC 0x14bd024 Jet\'。, SQL state S1000 in SQLConnect in E:\\wwwroot\\phperz.com\\phpweb\\conn.php on line 8

出现这种错误证明你使用的是odbc的access驱动,就是上面说的第一种连接数据库的方法$connstr=DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\".$db;

并且你当前访问的文件和你的conn.php数据库连接文件不在同一目录下,包含conn.php时用的相对路径,比如 include(\"../conn.php\"),由于php处理include函数里的文件和 asp的不同,

造成了数据库路径上的错误,

解决方法:

1,检查你数据库的路径,是不是用realpath()函数加相对路径来获取的,

比如:$db=realpath(\"../db.mdb\");
如果是,请换种方法获取数据库地址,比如用:$_SERVER[\'DOCUMENT_ROOT\']来获取你网站的根目,再加数据库的地址

例:$db=$_SERVER[\'DOCUMENT_ROOT\'].\"\\db.mdb\";

2,检查权限,赋予他Everyone权限

3,换种连接方式,微软的odbc驱动存在一些不稳定的bug,有可能导致此类错误,据说微软本身已经放弃了对odbc数据源连接方式的支持,并建议用户使用oledb方式,应该将连接字串改为如下方式:

\"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\".$db;

     错误2:

Fatal error: Uncaught exception \'com_exception\' with message \'Source: ProviderDescription: 验证失败。\' in E:\\wwwroot\\phperz.com\\phpweb\\conn.php:7 Stack trace: #0 E:\\wwwroot\\phperz.com\\phpweb\\conn.php(7): com->Open(\'Provider=Micros...\') #1 ...............


这种错误说明你用的是oledb的方式连接的数据库,并且也是数据库的路径造成的.

解决方法同上,用$_SERVER[\'DOCUMENT_ROOT\'].\"\\db.mdb\";方法获取数据库地址

     错误3:

复制代码 代码如下:

Warning: odbc_connect() [
function.odbc-connect
]: SQL error: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序, SQL state IM002 in SQLConnect in E:\\wwwroot\\phperz.com\\phpweb\\conn.php on line 8


odbc 驱动方式连接的数据库,错误原因多半是你的连接字符串写错了,完整的连接字符串应该是:

复制代码 代码如下:

$db=$_SERVER[\'DOCUMENT_ROOT\'].\"\\db.mdb\";
$connstr=\"Driver={Microsoft Access Driver (*.mdb)};Dbq=$db;Uid=Admin;Pwd=pass\";
$connid=odbc_connect($connstr,\"admin\",\"pass\",SQL_CUR_USE_ODBC) or die(\"数据库打开失败!请联系管理员\");

如果你的数据库没有密码以上Uid和Pwd可以省略

复制代码 代码如下:

$connstr=\"Driver={Microsoft Access Driver (*.mdb)};Dbq=$db\";
$connid=odbc_connect($connstr,\"\",\"\",SQL_CUR_USE_ODBC) or die(\"数据库打开失败!请联系管理员\");

错误4:
Fatal error: Uncaught exception \'com_exception\' with message \'Source: ADODB.ConnectionDescription: 未找到提供程序。该程序可能未正确安装。\' in......................

oledb连接方式,错误原因同上,完整的连接字符串应该是:

复制代码 代码如下:

$db=$_SERVER[\'DOCUMENT_ROOT\'].\"\\db.mdb\";
$conn=new com(\"ADODB.connection\");
$connstr=\"Provider=Microsoaft.Jet.OLEDB.4.0;Data Source=\".$db;     
$conn->Open($connstr);

本文地址:https://www.stayed.cn/item/17273

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。