扩展Zend_Db

时间:2010-01-08 14:24:58

标签: zend-framework zend-db

我很抱歉,如果我的标题有点误导,事实证明它是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)]'in   \ Sacp026a \ sebamweb $ \ PROD \包括\ Zend的\ DB \声明\ 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-patch以便能够首先获取多个行集。

0 个答案:

没有答案