1

如果我的标题有点误导,我很抱歉,事实证明它是Zend_Db.

我使用以下方法从 MSSQL 中提取数据:

// $_config contains information about how to connect to my MSSQL server
$config = new Zend_Config($_config);
$db = Zend_Db::factory($config->database);

$sql = "SELECT * FROM table1";
print_r($db->fetchAll($sql));

到目前为止没有问题,一切顺利:)。

现在我需要使用多个行集运行一些更复杂的查询:

$sql2 = <<<EOD
  DECLARE @test INT
  SET @test = 42
  SELECT * FROM table1 WHERE col1 = @test

  SELECT col2 FROM table2 UNION 
  SELECT col3 FROM table2 

  SELECT * FROM table3
EOD;
print_r($db->fetchAll($sql2));

我希望你能明白。

使用$db->fetchAll($sql2);将导致

致命错误:未捕获异常 'Zend_Db_Statement_Exception' 并带有消息 'SQLSTATE[HY000]:一般错误:10038 尝试启动新的 SQL Server 操作,结果挂起。[10038](严重性 7)[(null)]' 在 \Sacp026a\sebamweb$\prod\includes\Zend\Db\Statement\Pdo.php:234

以下函数将返回所有正确的行集:

function sqlquery_multiple($zdb, $sql) {
    $stmt = $zdb->query($sql);
    $rowsets = array();
    do {
      if ($stmt->columnCount() > 0) {
        $rowsets[] = $stmt->fetchAll(PDO::FETCH_ASSOC);
      }
    } while ($stmt->nextRowset());
    return $rowsets;
}
print_r(sqlquery_multiple($db, $sql2));

现在我的大问题是:我如何扩展Zend_Db,所以我可以实现和使用上面的函数$db->fetchMulti($sql2);而不是sqlquery_multiple($db, $sql2)

提前致谢 :)

注意:值得一提的是,我使用ODBC 补丁是为了能够首先获取多个行集。

4

0 回答 0