原文链接:
PHP rocks on SAP HANA too!
几天前,一个朋友告诉我最近一些同仁尝试使用
PHP
访问
SAP HANA
,但是都以失败告终。因此,我就把这件事作为自己的目标了。虽然我已经很久没用过
PHP
了,但是这阻止不了我。
首先是创建
ODBC
连接,然后尝试使用它,但是失败了。仅仅因为我创建的连接使用的是“用户
DSN
”而不是“系统
DSN
”。什么时候该使用哪一个,我不知道。但是通过使用“系统
DSN
”成功了,所以就不管了。
既然
ODBC
已经工作了,那么就该写一个简单的查询来测试,再次失败。。。得到的是乱七八糟和令人费解的错误信息:
“
Scrollable Result is not yet implemented-
可滚动结果尚未实现”,到底是什么意思?首先我认为可能是
NVARCHAR
不被支持,因此我就创建了一个只包含两个
VARCHAR
字段的临时表,得到的结果还是一样。因此应该是其他什么原因。最后我不得不求助于
Google
,我发现一些数据库允许使用游标来前后移动。
SAP HANA
这里以某种方式给我提示了一个错误,那么最简单的方法就是指定游标 :wink:
。
$conn = odbc_connect("HANA_KT_SYS","SYSTEM","manager", SQL_CUR_USE_ODBC);
即使用
SQL_CUR_USE_ODBC
就可以了。
对于这个例子,我决定通过关联表
SPFLI
和
SCARR
来创建一个属性视图。第一个页面显示所有可用的
CARRID
,第二个页面使用
HTML
表格显示一些字段,整个内容简单而直接。
现在,然我们看看
PHP
代码(PHP_SAPHANA.php):
<?php
$conn = odbc_connect("HANA_KT_SYS","SYSTEM","manager", SQL_CUR_USE_ODBC);
if (!($conn)) {
echo "<p>Connection to DB via ODBC failed: ";
echo odbc_errormsg ($conn );
echo "</p>\n";
else{
if(isset($_POST["CARRID"]) == false)
$sql = "SELECT CARRID, CARRNAME FROM SFLIGHT.SCARR WHERE MANDT = 300";
$rs = odbc_exec($conn,$sql);
print("<DIV ALIGN='CENTER'>");
print("<H1>SAP HANA from PHP</H1>");
print("<FORM NAME='Get_Data' ACTION='$_SERVER[PHP_SELF]' METHOD='POST'>");
print("<SELECT NAME='CARRID'>");
while($row = odbc_fetch_array($rs)){
$carrid = $row["CARRID"];
$carrname = $row["CARRNAME"];
print("<OPTION VALUE='$carrid'>$carrname");
print("</SELECT>");
print("<INPUT TYPE='SUBMIT' VALUE='Get Data'>");
print("</FORM>");
print("</DIV>");
else{
$carrid_param = $_POST["CARRID"];
$sql = "SELECT * FROM \"_SYS_BIC\".\"blag/AV_FLIGHTS\"
WHERE CARRID = '$carrid_param'";
$rs = odbc_exec($conn,$sql);
print("<DIV ALIGN='CENTER'><TABLE BORDER=1>");
print("<TR><TH>MANDT</TH><TH>CARRID</TH><TH>CONNID</TH>
<TH>COUNTRYFR</TH><TH>CITYFROM</TH>
<TH>AIRPFROM</TH><TH>COUNTRYTO</TH>
<TH>CARRNAME</TH><TH>DISTANCE</TH></TR>");
while($row = odbc_fetch_array($rs)){
$mandt = $row["MANDT"];
$carrid = $row["CARRID"];
$connid = $row["CONNID"];
$countryfr = $row["COUNTRYFR"];
$cityfrom = $row["CITYFROM"];
$airpfrom = $row["AIRPFROM"];
$countryto = $row["COUNTRYTO"];
$carrname = $row["CARRNAME"];
$distance = $row["DISTANCE"];
print("<TR><TD>$mandt</TD><TD>$carrid</TD>
<TD>$connid</TD><TD>$countryfr</TD>
<TD>$cityfrom</TD><TD>$airpfrom</TD>
<TD>$countryto</TD><TD>$carrname</TD>
<TD>$distance</TD></TR>");
print("</TABLE>");
print("<A HREF='PHP_SAPHANA.php'>Go Back</A></DIV>");
?>
现在,我们可以从浏览器里调用它:
你会看到,这里对于你使用
SAP HANA
做什么没有任何限制。有时候成功,其实就在下一步。 :wink: