php连接Access数据库错误及解决方法
php+access连接数据库常用的方式一般有两种.
推荐的代码
需要注意php获取路径用的是realpath
<?php
$connstr="DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ=".realpath("data.mdb");
$connid=odbc_connect($connstr,"","",SQL_CUR_USE_ODBC);
$issuetime=date("Y-m-dH:i:s");
$sql="insertintotestvalues("","",...)";
$result=odbc_exec($connid,$sql);
if($result)echo"successful";
elseecho"failed";
?>
之二:
<?PHP
//创建ADO连接
$conn=@newCOM("ADODB.Connection")ordie("ADO连接失败!");
$connstr="DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ=".realpath("temp/TempData.mdb");
$conn->Open($connstr);
//创建记录集查询
$rs=@newCOM("ADODB.RecordSet");
$rs->Open("select*fromblog_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={MicrosoftAccessDriver(*.mdb)};DBQ=".$db;
$connid=odbc_connect($connstr,"username","password",SQL_CUR_USE_ODBC);
2.用oledb方式连接,再调用open方法打开
如:
但这二种方法怎么连接都出错,去网上找资料,有的说是没有赋予Everyone权限,有的说是access97和access2000的驱动不一样(就是数据库是2000建的,读取用的驱动是97的.)造成的. 经过反复测试原来是数据库的路经造成的.以前在开发asp时习惯把数据库的地址写成相对路径,再用server.mappath()函数获取他的绝对路径. 在开发php时也延续了这个习惯,用realpath加数据库的相对路径来获取数据库的地址.比如:$db=realpath("../db.mdb"); 但asp的include函数和php的include函数在处理包含文件的方式似乎不同,造成了php在不同目录下包含conn.php文件连接数据库出现"常见错误不能打开注册表关键字", 或Uncaughtexception"com_exception"withmessage"Source:ProviderDescription:验证失败。"的错误. 现在把错误信息及解决方法整理一下贴给大家,希望别的朋友遇到这种情况不用像我这样郁闷 错误1 php连接access数据库常见问题 出现这种错误证明你使用的是odbc的access驱动,就是上面说的第一种连接数据库的方法$connstr=DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ=".$db; 并且你当前访问的文件和你的conn.php数据库连接文件不在同一目录下,包含conn.php时用的相对路径,比如include("../conn.php"),由于php处理include函数里的文件和asp的不同, 造成了数据库路径上的错误, 解决方法: 1,检查你数据库的路径,是不是用realpath()函数加相对路径来获取的, 比如:$db=realpath("../db.mdb"); 例:$db=$_SERVER["DOCUMENT_ROOT"]."\db.mdb"; 3,换种连接方式,微软的odbc驱动存在一些不稳定的bug,有可能导致此类错误,据说微软本身已经放弃了对odbc数据源连接方式的支持,并建议用户使用oledb方式,应该将连接字串改为如下方式: "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=".$db; 错误2: Fatalerror:Uncaughtexception"com_exception"withmessage"Source:ProviderDescription:验证失败。"inE:\wwwroot\phperz.com\phpweb\conn.php:7Stacktrace:#0E:\wwwroot\phperz.com\phpweb\conn.php(7):com->Open("Provider=Micros...")#1............... 解决方法同上,用$_SERVER["DOCUMENT_ROOT"]."\db.mdb";方法获取数据库地址 错误3: 如果你的数据库没有密码以上Uid和Pwd可以省略 错误4:
$conn=newcom("ADODB.connection");
$connstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=".$db;
$conn->Open($connstr);
Warning:odbc_connect()[
function.odbc-connect
]:SQLerror:[Microsoft][ODBCMicrosoftAccessDriver]常见错误不能打开注册表关键字"Temporary(volatile)JetDSNforprocess0xdd0Thread0xcb8DBC0x14bd024Jet"。,SQLstateS1000inSQLConnectinE:\wwwroot\phperz.com\phpweb\conn.phponline8
如果是,请换种方法获取数据库地址,比如用:$_SERVER["DOCUMENT_ROOT"]来获取你网站的根目,再加数据库的地址
2,检查权限,赋予他Everyone权限
这种错误说明你用的是oledb的方式连接的数据库,并且也是数据库的路径造成的.
Warning:odbc_connect()[
function.odbc-connect
]:SQLerror:[Microsoft][ODBC驱动程序管理器]未发现数据源名称并且未指定默认驱动程序,SQLstateIM002inSQLConnectinE:\wwwroot\phperz.com\phpweb\conn.phponline8
odbc驱动方式连接的数据库,错误原因多半是你的连接字符串写错了,完整的连接字符串应该是:
$db=$_SERVER["DOCUMENT_ROOT"]."\db.mdb";
$connstr="Driver={MicrosoftAccessDriver(*.mdb)};Dbq=$db;Uid=Admin;Pwd=pass";
$connid=odbc_connect($connstr,"admin","pass",SQL_CUR_USE_ODBC)ordie("数据库打开失败!请联系管理员");
$connstr="Driver={MicrosoftAccessDriver(*.mdb)};Dbq=$db";
$connid=odbc_connect($connstr,"","",SQL_CUR_USE_ODBC)ordie("数据库打开失败!请联系管理员");
Fatalerror:Uncaughtexception"com_exception"withmessage"Source:ADODB.ConnectionDescription:未找到提供程序。该程序可能未正确安装。"in......................
oledb连接方式,错误原因同上,完整的连接字符串应该是:
$db=$_SERVER["DOCUMENT_ROOT"]."\db.mdb";
$conn=newcom("ADODB.connection");
$connstr="Provider=Microsoaft.Jet.OLEDB.4.0;DataSource=".$db;
$conn->Open($connstr);
相关文章