我很抱歉,如果我的标题有点误导,事实证明它是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以便能够首先获取多个行集。