2016-02-05 48 views
1

我試圖通過php腳本查詢DB2數據庫。php函數db2_exec未運行特定的DB2查詢

if ($conn) { 
    $stmt = db2_prepare($conn, $sql); 
    if ($stmt) { 
     $success = db2_execute($stmt); 
     if (!$success) { 
     $result[]= "exec errormsg1: " .db2_stmt_errormsg($stmt); 
     echo implode(' ',$result); 
     $message = implode(' ',$result); ?> 
     <script> 
     window.alert(' <?php echo $message; ?>'); 
     </script> 
     <?php 
     } 
     else 
     { 
     while ($row = db2_fetch_both($stmt)) 
     { 
      if ($format == "human"){ 
       $result[] = implode("  ", $row); 
      } else { 
       $result[] = implode(",", $row); 

      } 
     } 

我遇到了使用db2_exec或db2_execute運行的某些查詢的問題。

我是有代碼的問題上面的元數據類型的查詢,但並找到了一些解決方法,例如像如果我的SQL硬編碼爲

$query = "describe table schemaID.tablename"; 

我需要在

包裹它來修改它
$sql = "call SYSPROC.ADMIN_CMD('".$query."')"; 

因此而適用於描述功能我留下抓我的頭在如何處理這些類型的命令一樣

list tables for schema schemaID 
辦個

EXEC errormsg1錯誤:[IBM] [CLI驅動程序] [DB2/AIX64] SQL0104N意外的標記 「表」 之後發現 「列表」。預期的標記可能包括:「JOIN」。 SQLSTATE = 42601

get db cfg 

錯誤

EXEC errormsg1:[IBM] [CLI驅動程序] [DB2/AIX64] SQL0104N意外的標記 「DB」 被發現在「GET」之後。預期的令牌可能包括:「STMM」。 SQLSTATE = 42601

從錯誤消息我看它有一個分隔符的問題,但我不確定爲什麼,因爲我可以讓其他查詢正常工作。

此外,如果我試圖通過命令行運行這些命令,它們都將正常工作,沒有任何問題。

有什麼我失蹤了關於如何在PHP中正確查詢DB2?理想情況下,我希望能夠完全按照我從命令行運行相同的查詢,而不是面對這些問題

回答

1

您可以使用該PHP代碼執行DB2 SQL statements。你所要求的是在代碼中運行DB2 CLP commands,這在定義上是不可能的。

您可以嘗試在某些任務的DB2手冊中找到解決方案,例如使用ADMIN_CMD存儲過程。對於某些命令(如「列表表」),可以通過直接查詢DB2 system catalog(例如表SYSCAT.TABLES)來找到解決方法。

+0

謝謝你,我不知道SQL和CLP語句之間的區別。出於某種原因,我只是假設db2_exec會模仿db2命令行! – segaps

+0

請標記爲答案 –