php 函数 db2_exec 不是 运行 特定的 DB2 查询

php function db2_exec not running specific DB2 queries

我正在尝试通过 php 脚本查询 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."')";

所以虽然这适用于 describe 函数,但我仍然在摸索如何处理这些类型的命令,例如

list tables for schema schemaID

哪些错误

exec errormsg1: [IBM][CLI Driver][DB2/AIX64] SQL0104N An unexpected token "tables" was found following "list ". Expected tokens may include: "JOIN ". SQLSTATE=42601

get db cfg

中有哪些错误

exec errormsg1: [IBM][CLI Driver][DB2/AIX64] SQL0104N An unexpected token "db" was found following "GET". Expected tokens may include: "STMM". SQLSTATE=42601

从错误消息中我看到它存在分隔符问题,但我不确定具体原因,因为我可以让其他查询正常工作。

此外,如果我尝试通过命令行 运行 这些命令,它们都可以正常工作,没有任何问题。

关于如何在 php 中正确查询 DB2,我是否遗漏了什么?理想情况下,我希望能够 运行 与我在命令行中完全相同的查询,而不是面对这些问题

您可以在您的代码中执行 DB2 SQL statements with that PHP code. What you are asking for is to also run DB2 CLP commands,这在定义上是不可能的。

您可以尝试在 DB2 手册中找到某些任务的解决方案,例如,使用 ADMIN_CMD 存储过程。对于像 "LIST TABLES" 这样的命令,有一个解决方法是直接查询 DB2 system catalog,例如 table SYSCAT.TABLES.