我需要将LAMP(
Linux Ubuntu 12.10,Apache 2,
MySQL 5,
PHP 5.3)服务器中的
PHP脚本连接到Access MDB数据库(版本2003).
1. unixODBC和驱动程序安装
Ubuntu 12.10附带unixodbc 2.2.14软件包(http://packages.ubuntu.com/quantal/unixodbc).安装很简单:apt-get install unixodbc libmdbodbc1 php5-odbc.这样我就可以使用mdbTools驱动程序和ODBC PHP功能unixODBC.
我用mdbtools驱动程序编辑了/etc/odbcinst.ini:
[MDBToolsODBC]
Description = MDBTools Driver
Driver = libmdbodbc.so.1
我用Access数据源编辑了/etc/odbc.ini:
[FormPulmo]
Description = FormulariCDRPulmo
Driver = MDBToolsODBC
Servername = localhost
Database = /mnt/svrfit/cdr/bd_pulmo_hardlink.mdb
UserName =
Password =
port = 5432
最后我从shell测试了它的工作原理:
> isql -v formpulmo
Connected!
2. PHP连接
使用PHP初始化似乎都可以正常工作:
$link = odbc_connect ('formpulmo',"","");
$res = odbc_exec ($link,"SELECT * FROM exampleTable");
第一个问题是尝试访问名称中包含空格的表.示例:“示例表”.在Windows中,我将它放在括号之间([示例表])但它没有用.最后我找到了解决方案:
$res = odbc_exec ($link,"SELECT * FROM \"example Table\"");
在此解决方案之前,尝试执行odbc_exec的所有浏览器响应都是“错误324(net :: ERR_EMPTY_RESPONSE)”
3. PHP问题!
但现在我坚持使用UPDATE语法.正常查询是:
$res = odbc_exec ($link,"UPDATE [Registre cancer de pulmo] SET CIP = 'example' WHERE CIP = 'example'");
浏览器响应为:“错误324(net :: ERR_EMPTY_RESPONSE)”(在Firefox中:“连接已重置”).
3.1.试过的解决方案
UPDATE \"Registre cancer de pulmo\" SET CIP = 'example' WHERE CIP = 'example'
UPDATE \"Registre cancer de pulmo\" SET \"CIP\" = 'example' WHERE \"CIP\" = 'example'
UPDATE {Registre cancer de pulmo} SET {CIP} = 'example' WHERE {CIP} = 'example'
连接不同的游标:
odbc_connect ($odbcFormPulmo,"","",SQL_CUR_USE_ODBC);
odbc_connect($odbcFormPulmo,"","",SQL_CUR_USE_DRIVER);
我不知道我还能尝试什么:-(
最佳答案 几个星期前,为了回应
this question,我在几乎与你的设置(Ubuntu 12.04而不是12.10)上进行了一些测试,发现我根本无法使用mdbtools.我认为有些人有时可以将其用于某种工作,但IMO mdbtools对于生产使用来说不够可靠.
在my answer年到那个问题,我建议调查ODBTP作为替代方案.它是一个免费的(GPL)TCP / IP协议,允许您将查询传递给Windows计算机,然后通过其ODBC驱动程序提交查询并将结果传递给您.我过去曾经使用过几次,但效果很好.