原文链接: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:
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
26 | |
14 | |
13 | |
13 | |
12 | |
8 | |
8 | |
7 | |
5 | |
5 |