Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 1112|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-9-4 12:26:45 | 显示全部楼层 |阅读模式

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

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-4 15:08 , Processed in 0.065279 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表