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