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 相关文章推荐
DedeCMS dede_channeltype表字段注释
Apr 07 PHP
json的键名为数字时的调用方式(示例代码)
Nov 15 PHP
PHP CURL获取返回值的方法
May 04 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
PHP的swoole扩展安装方法详细教程
May 18 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
Aug 02 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
PHP ADODB实现事务处理功能示例
May 25 PHP
php5.x禁用eval的操作方法
Oct 19 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
laravel-admin 在列表页添加自定义按钮的例子
Sep 30 PHP
PHP获取学生成绩的方法
Nov 17 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-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
jquery 元素相对定位代码
2010/10/15 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
react-router中的属性详解
2017/06/01 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
python修改操作系统时间的方法
2015/05/18 Python
python通过ssh-powershell监控windows的方法
2015/06/02 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
优秀班集体事迹材料
2014/12/25 职场文书
个人年终总结开头
2015/03/06 职场文书
征求意见函
2015/06/05 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
Python 中的 copy()和deepcopy()
2021/11/07 Python