ODBC数据库驱动类

#1 jake

试验新的数据库驱动类——ODBC驱动,这样可以支持Access,foxpro等数据库的操作了。
文件下载:odbc.zip

使用方式:(建议用GBK编码!)
1. 文件解压,放到框架目录的Drivers里面。
2. 配置:

'db' => array(  // 数据库连接配置
        'driver' => 'odbc',   // 驱动类型
        'host' => 'Driver={Microsoft Access Driver (*.mdb)};Dbq=mdb文件路径', // 链接字符串
        'login' => 'root',     // 用户名
        'password' => '',      // 密码
        'prefix' => '',           // 表前缀
        'persistent' => FALSE,    // 是否使用长链接
),
'db_driver_path' => SP_PATH.'/Drivers/odbc.php', // 自定义数据库驱动文件地址


链接字符串代表的是ODBC的链接字符串。
如:
Driver={Microsoft Access Driver (*.mdb)};Dbq=mdb文件路径
Driver={SQL Server Native Client 10.0};Server=服务器;Database=数据库名;
Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=EXCEL文件名;DefaultDir=默认目录

当然,很多时候,用户名和密码都是不需要的。


通常来说,PHP在windows下的安装,默认已经加入了ODBC的支持,而linux下面,基本不支持普通的ODBC。

该贴已经同步到 jake的微博

2011-03-21 20:23:00

#2 ynyjyz

又出好东西 支持

2011-03-21 20:39:01

#3 微博评论

推荐adodb数据库抽象层,支持很多数据库类型

来自 巧克力vs奶粉 的新浪微博

2011-03-22 00:44:38

#4 微博评论

不错,省了我改程序的时间了

来自 到处飞的空间 的新浪微博

2011-03-22 02:46:07

#5 jiayan41

这次使用又方便很多了,呵呵

2011-03-22 10:33:13

#6 zhgzzy

好象有点问题!!!
odbc.php 中没有 setlimit 在spModel.php 102行会出错,
odbc.php 中有个translimit 把他改名为setlimit 还是不行??

$shusers = spClass("lib_user")->findAll(array('uid'=>1));
结果如下: 多出一个空的
Array
(
    [0] => Array
        (
            [uid] => 1
            [umail] => peter
        )

    [1] =>
)
$shusers = spClass("lib_user")->find(array('uid'=>1));
就是一个空的没有任何输出????

2011-04-26 15:28:40

#7 jake

回复 6 zhgzzy


   这里少了setlimit函数,因为Access是没有Limit功能的,当然它自己可以用数据集,但那不是SQL的方式,所以没加。

如果你是在用mssql,那么你可以把GBK版的speedphp中的mssql驱动文件里面的setlimit复制到odbc.php里面,就可以了。

2011-04-26 18:48:46

#8 zhgzzy

还是会出现下面的问题:
1. find 好象没用
2. findAll 多出一个空数组
$shusers = spClass("lib_user")->findAll(array('uid'=>1));
结果如下: 多出一个空的
Array
(
    [0] => Array
        (
            [uid] => 1
            [umail] => peter
        )

    [1] =>
)
$shusers = spClass("lib_user")->find(array('uid'=>1));
就是一个空的没有任何输出????

2011-04-27 10:17:18

#9 jake

不清楚你的代码,你可以通过继承自行封装find和findAll,这里ODBC驱动之所以不作为官方驱动,正是因为ODBC支持多种库,而且这些库的操作都不一样,不能统一做兼容处理。连上面你用的库是什么我也不清楚,无法提供帮助。

2011-04-27 12:42:43

#10 zhgzzy

access数据库

2011-04-27 14:08:34

#11 jake

回复 10 zhgzzy


   access如何用limit,这我真的没研究。你可以看看mssql的驱动,就知道为什么一个limit在驱动里面实现为什么会很复杂。

2011-04-27 23:06:24

#12 西西梅丽

Access 数据库 findAll确实多一行空记录

2011-11-04 13:17:06

#13 xiaozisha

请问下我一个网站里面,可以同时使用两种数据库吗?困惑啊

2013-05-19 22:22:21

#14 jake

xiaozisha 发表于 2013-5-19 22:22
请问下我一个网站里面,可以同时使用两种数据库吗?困惑啊
看手册,多数据库的内容

2013-05-20 22:23:23