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 相关文章推荐
如何做到多笔资料的同步
Oct 09 PHP
聊天室php&amp;mysql(六)
Oct 09 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 PHP
利用PHP生成静态HTML文档的原理
Oct 29 PHP
php判断正常访问和外部访问的示例
Feb 10 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
php7 图形用户界面GUI 开发示例
Feb 22 PHP
PHP的imageTtfText()函数深入详解
Mar 03 PHP
PHP7 错误处理机制修改
Mar 09 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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开发入门教程之面向对象
2006/12/05 PHP
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
javascript动画浅析
2012/08/30 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
js+css实现红包雨效果
2018/07/12 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
Python中使用HTMLParser解析html实例
2015/02/08 Python
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
pycharm新建一个python工程步骤
2019/07/16 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
小班秋游活动方案
2014/02/22 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
2014年党务公开方案
2014/05/08 职场文书
阅兵口号
2014/06/19 职场文书
先进事迹材料范文
2014/12/29 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书