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


Posted in PHP onJune 20, 2013

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);
PHP 相关文章推荐
PHP5.0对象模型探索之抽象方法和抽象类
Sep 05 PHP
php 获取本机外网/公网IP的代码
May 09 PHP
php笔记之:AOP的应用
Apr 24 PHP
win7下memCache的安装过程(具体操作步骤)
Jun 28 PHP
php初始化对象和析构函数的简单实例
Mar 11 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
Dec 02 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
PHP编写RESTful接口
Feb 23 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
Nov 15 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
PHP实现基于3DES算法加密解密字符串示例
Aug 24 PHP
PHP连接Access数据库的方法小结
Jun 20 #PHP
如何使用php判断所处服务器操作系统的类型
Jun 20 #PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 #PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 #PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 #PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 #PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 #PHP
You might like
PHP 基于文件头的文件类型验证类函数
2012/05/01 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
详解python3中zipfile模块用法
2018/06/18 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
Python识别验证码的实现示例
2020/09/30 Python
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
《姥姥的剪纸》教学反思
2014/02/25 职场文书
美容院经理岗位职责
2014/04/03 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
2022/05/25 SQL Server