私のタイトルが少し誤解を招くものであり、それがの下にある他のクラスであることが判明した場合は、お詫び申し上げます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結果が保留中の新しいSQLServer操作を開始しようとしました。[10038](重大度7)[(null)]'in \ Sacp026a \ sebamweb $ \ prod \ include \ 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パッチを使用していることは言及する価値があります。