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 动态多文件上传
Jan 18 PHP
php操作sqlserver关于时间日期读取的小小见解
Nov 29 PHP
php 静态变量与自定义常量的使用方法
Jan 26 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
php表单提交与$_POST实例分析
Jan 26 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
php实现的网页版剪刀石头布游戏示例
Nov 25 PHP
php base64 编码与解码实例代码
Mar 21 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 PHP
Laravel 5+ .env环境配置文件详解
Apr 06 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
关于时间计算的结总
2006/12/06 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
vue-axios使用详解
2017/05/10 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
分享一个常用的Python模拟登陆类
2015/03/29 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
python win32 简单操作方法
2017/05/25 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
播音主持专业个人自我评价
2014/01/09 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
《忆江南》教学反思
2014/04/07 职场文书
暑期社会实践证明书
2014/11/17 职场文书
小学教师岗位职责
2015/04/02 职场文书
公司出差管理制度范本
2015/08/05 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android