最近接到一个项目,因为客户嫌LUMIA的 License太贵,用户又多,所以想用省钱的办法看SAP HANA的报表(B/S架构),所以给了用PHP做HANA报表的方案。
首先要考虑的是连接问题,原来我做项目时,都是优先考虑PHP ADODB组件,但PHP ADODB组件中没有封装HANA的驱动,所以就只好用ODBC的办法。
SAP HANA 的ODBC联接有很多坑,其实都是源于对HANA, Windows操作系统,PHP ODBC的 64bit, 32bit的概念模糊混淆所至。
这里要提到的第一个重点,就是PHP ODBC要联接SAP HANA数据库,必须要安装HANA ODBC client的 32 bit驱动,64bit的 ODBC 暂不支持,我已经测试了N遍不通,ODBC驱动安装完以后,在windows\SysWOW64\目录下打开odbc32.exe, 然后自行新建一个系统DSN,选择HDBODBC32驱动,输入ServerNode, 用户名,密码等信息,点connect,如果 OK, 那么恭喜你完成了第一步。
在讲第二个重点之前,我先说明一下我的开发环境 Windows2008 R2(64Bit)操作系统,PHP的环境我采用的是WAMP组件,这第二个重点就是必须安装32 Bit 的WAMP, 而不是64bit的,否则用odbc_connect函数时会报错,连接不上数据源。
安装好 WAMP环境后,写一个debug.php如下
$server_node=“192.168.2.11:30015”;
$db_name=“test01';
$conn = odbc_connect("Driver=HDBODBC32;ServerNode=$server_node;Database=$db_name;",$username,$password,SQL_CUR_USE_ODBC);
//这里要注意两点,直接连你建立的DSN名字是不行的,因为系统默认是去64bit的ODBC中去找DSN名字,所以这里的odbc_connect中要写完整的包括驱动名称的连接字符串,另外在最后加上游标类型 SQL_CUR_USE_ODBC
if($conn){
echo "so good! System connected";
}else{
echo "So bad! System cannot be connected!";
}
在浏览器中打开 http://localhost/testhdb/debug.php
如果你看到 so good! System connected, 那恭喜你,可以进行下面的开发了。
如果在开发中遇到一些问题,请参考我转载的两个英文帖,专门讲ODBC参数的。
希望能对有同类需求的朋友有所帮助,有问题欢迎交流。