整理思路:
首先,理解清楚一个mdb文件就是一个数据库,php要连接access的数据库就需要有相关数据库驱动扩展,因此要开启pdo_odbc驱动。
其次,使用ci框架,可以利用其自带的数据库类,因此要配置config/database.php的基本配置(也可以不写死配置,可自己使用时动态传入配置),但因为已经使用wamp带的mysql数据库,此时就需要找到配置多数据库的方法。
然后,配置好之后可以尝试连接mdb文件,但出现问题。
最后,多方探索,锲而不舍,解决问题。
解决问题:
php扩展问题
我使用的wampserver环境,连接mdb需要开启pdo_odbc的扩展,因此在wampserver中直接找到并开启。(wamp会自动重启生效。);查看phpinfo可以找到pdo_odbc的扩展表示开启成功。
ci多数据库配置问题
ci框架的config/database.php配置中默认是default字段配置,你可以自定义一个名称copy一份配置,并修改其中的参数为要连接的mdb文件的配置。如下:
// 配置第二个数据库。操作access数据库 //access数据库(这个是用的odbc驱动)
// $db['access']['dbdriver'] = "odbc";//odbc驱动
$db['access']['dbdriver'] = "pdo";//pdo驱动
// $db['access']['hostname'] = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=D:/wamp64/www/ipms/server/files/123.mdb";//odbc驱动
$db['access']['hostname'] = "odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=D:/wamp64/www/ipms/server/files/123.mdb";//pdo驱动,
$db['access']['username'] = "admin";
$db['access']['password'] = "123";
$db['access']['dbprefix'] = "";
$db['access']['pconnect'] = false;
$db['access']['db_debug'] = TRUE;
$db['access']['cache_on'] = FALSE;
$db['access']['cachedir'] = "";
$db['access']['char_set'] = "utf8";
$db['access']['dbcollat'] = "utf8_general_ci";
$db['access']['swap_pre'] = '';
$db['access']['autoinit'] = TRUE;
$db['access']['stricton'] = FALSE;
解释:只需要修改两个地方,就是hostname和dbdriver。按照网上大家贴出来的写即可。写完之后,就是踩坑埋坑之旅。
配置注意的点:
可以使用两套不同的驱动连接,pdo和odbc。
配置hostname的神坑:按照以上写是没问题的(一个空格都不能少,我配置时就踩了,Driver和括号之间空格,括号里的每一项要空格,逗号挨着前一项。)
dbq=后面是跟的你的数据库路径(全路径)。
配置出错就提示SQLSTATE[IM002] SQLDriverConnect: 0 [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序错误,因此你需要检查系统情况(直接复制这个错误提示去问度娘,在odbc数据源管理程序中新增数据源)
用户名和密码需要看你access数据库。
后续,连接并获取到数据之后,因为编码问题,json_encode的转码问题导致无法输出字符串到前端,任重道远...
总结:
1.wampserver 开启pdo_odbc扩展
2.ci框架配置多数据库访问
3.连接access数据库的配置写法,坑多,需仔细
4.odbc驱动程序管理器未发现数据源的问题
5.编码转码问题