SP_HELP输出到PHP数组

tsm1rwdh  于 2023-05-16  发布在  PHP
关注(0)|答案(2)|浏览(303)

我试图创建一个简单的PHP页面来描述我的DB的表,这样我就可以总是找到一个表/列名或数据类型,我正在寻找(一种穷人的模式,如果你愿意)。
我过去用Sybase数据库做过这个,但我们的新数据库将是SQL Server,所以我试图使用该数据库重现它。

try {
  $conn = new PDO("odbc:Driver={SQL Native Client};Server=servername,1433;Database=dbname;Uid=user;Pwd=password;");
  $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 
} catch(PDOException $e) {
  echo 'Connection failed: ' . $e->getMessage();
}

try {
  $query = $conn->query("execute sp_help tablename");
} catch(PDOException $e) {
  echo "Error: ".$e->getMessage();
}
while($result = $query->fetch(PDO::FETCH_ASSOC)) {
  print_r($result);
}

但这就好像我只得到第一个结果(它不会循环)。我期待类似于这里给出的例子SQL Server FAQ,但我得到的只是第一行(name,owner,type,date_created),结果集没有给出列名等(这是我真正想要的)。
有什么想法吗
更新:根据TechNet,如果给定的参数是一个用户表,它应该返回列,但在这种情况下它没有。我得到的只有...

Array ( [Name] => TableName [Owner] => dbo [Type] => user table [Created_datetime] => 2013-07-15 23:26:43.377 )
zfciruhq

zfciruhq1#

我能想到的唯一方法是在sybase端创建一个过程,它可以调用sp_help并返回require数据。这个程序可以在你需要的时候使用。

3yhwsihp

3yhwsihp2#

这个问题是10年前的事了,但从那以后我没有找到其他答案。我的解决方案:这对我很有效(不仅在获取sp_help 'tablename'时):

private function sqlQueryMultipleRecordsets($query) {
    //echo $query;
    $stmt = $this->conn->query($query);
    if (!$stmt) {
        die("DB-Error");
    }
    $resultNr = 0;
    $result_sets = [];
    do {
        if ($stmt->columnCount() > 0) { 
            $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
            foreach ($result as $row) {
                $result_sets['RS_'.(string)$resultNr][] = $row;
            }
        }
        $resultNr += 1;
    } while ($stmt->nextRowset());

    return $result_sets;
}

相关问题