Skip to Content

     原文链接:PHP rocks on SAP HANA too!

     几天前,一个朋友告诉我最近一些同仁尝试使用PHP访问SAP HANA,但是都以失败告终。因此,我就把这件事作为自己的目标了。虽然我已经很久没用过PHP了,但是这阻止不了我。

     首先是创建ODBC连接,然后尝试使用它,但是失败了。仅仅因为我创建的连接使用的是“用户DSN”而不是“系统DSN”。什么时候该使用哪一个,我不知道。但是通过使用“系统DSN”成功了,所以就不管了。

    既然ODBC已经工作了,那么就该写一个简单的查询来测试,再次失败。。。得到的是乱七八糟和令人费解的错误信息:

/wp-content/uploads/2013/01/image_png_179976.png

      Scrollable Result  is not yet implemented-可滚动结果尚未实现”,到底是什么意思?首先我认为可能是NVARCHAR不被支持,因此我就创建了一个只包含两个VARCHAR字段的临时表,得到的结果还是一样。因此应该是其他什么原因。最后我不得不求助于Google,我发现一些数据库允许使用游标来前后移动。SAP HANA这里以某种方式给我提示了一个错误,那么最简单的方法就是指定游标 😉

$conn = odbc_connect(“HANA_KT_SYS”,”SYSTEM”,”manager”, SQL_CUR_USE_ODBC);

即使用SQL_CUR_USE_ODBC就可以了。

          对于这个例子,我决定通过关联表SPFLISCARR来创建一个属性视图。第一个页面显示所有可用的CARRID,第二个页面使用HTML表格显示一些字段,整个内容简单而直接。

PHP_SAPHANA_002.png

现在,然我们看看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>");
          }
}
?>

现在,我们可以从浏览器里调用它:

PHP_SAPHANA_003.png

PHP_SAPHANA_004.png

PHP_SAPHANA_005.png

你会看到,这里对于你使用SAP HANA做什么没有任何限制。有时候成功,其实就在下一步。 😉

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply