添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

原文链接: 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: