mysql连接access失败_php连接Access数据库错误及解决方法

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

推荐的代码

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

$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";

?>

之二:

//创建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 "
";

$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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
步科触摸屏的函数脚本说明 目 录 1. KingSCADA的条件事件脚本等系统脚本中不能调用画面内部的对象吗? ...1 2. 我想在一个画面中调用另一个画面的内部对象,怎样做?............................1 3. 画面自定义变量和属性除了能被本画面的图素引用,其他的画面能引用吗? .............................................................................................................................................3 4. 导航图应用有EnableNavigate()和ShowNavigateWindow()两个函数,他们有什 么区别?.............................................................................................................................3 5. KingSCADA 提 供 保 存 画 面 的 函 数 , 如 SavePictureToFile() 、 SaveWholePictureToFile()函数,我写在按钮命令语言里为什么不执行?..................3 6. 利用表格模板和SQLCreateTable()函数创建数据库表格,为什么创建不成 功?.....................................................................................................................................3 7. 用SQLDropTable()函数删除一个数据库表格,为什么删不掉? ....................3 8. 用SQLGetRecord()函数为什么不能返回当前选择集中的指定序号的记录? 3 9. 用VarRefAddress函数不能实现变量的引用?..................................................4 10. KingSCADA运行系统怎样得到当前产生的报警数量? .................................4 11. 怎样从实时报警窗中手动删除确认过的报警记录?......................................5 12. KingSCADA可以实现通过弹出对话框让用户选择文件的功能吗? .............5 13. 有累计计算脚本,长时间运行后,累计值不变?..........................................6 14. FileWriteStr(“c:\sql.txt”,0,“sfd%”,0);但是输出文本里少了%?........................6 15. 在应用程序启动时脚本里添加了打开画面函数,运行时,画面没有打开? .............................................................................................................................................6 16. KS工程里有数据库查询或插入的脚本,长时间运行后,不能查询或插入记 录?.....................................................................................................................................6 17. KingSCADA的全局脚本、局部脚本有大小的限制吗? .................................6 18. KingSCADA中怎样实现把同一类型的文件名显示在列表框中?类似于组态 王的ListLoadFileName()函数的功能。............................................................................6 19. 怎样在KingSCADA运行时获取加密锁序列号? ............................................7 20. 通过调用数据集函数KDBGetDataset()对access数据库进行操作时,一直 报错“对象关闭时,不允许操作。 DBAccess: Open the source recordset failed!”?.7 21. 图素对象属性中的hotkey热键作用?...............................................................7

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值