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 相关文章推荐
PHP&amp;MYSQL服务器配置说明
Oct 09 PHP
上传多个文件的PHP脚本
Nov 26 PHP
CodeIgniter框架中_remap()使用方法2例
Mar 10 PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 PHP
win平台安装配置Nginx+php+mysql 环境
Jan 12 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
PHP GD库相关图像生成和处理函数小结
Sep 30 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 PHP
php实现mysql连接池效果实现代码
Jan 25 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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生成xml时添加CDATA标签的方法
2014/10/17 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
javscript对象原型的一些看法
2010/09/19 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
用javascript判断IE版本号简单实用且向后兼容
2013/09/11 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
2018/09/27 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
Python 流程控制实例代码
2009/09/25 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
基于Python pip用国内镜像下载的方法
2018/06/12 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
蔻驰美国官网:COACH美国
2016/08/18 全球购物
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
理货员的岗位职责
2013/11/23 职场文书
好军嫂事迹材料
2014/01/15 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
科级干部培训心得体会
2016/01/06 职场文书