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結果が保留中の新しい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パッチを使用していることは言及する価値があります。

4

0 に答える 0