2012-02-29 25 views
5

私はPHPで書かれたWebアプリケーションを開発しており、SQL Server 2008を使用しています。データベースに接続するために、MicrosoftのSQLSRVドライバを使用しました。このアプリケーションの一部では、SQLトランザクションを使用する必要があります。マイクロソフトが示唆するように、私はこの記事に基づいています。 jQueryの経由PHPファイルに情報を送信し、結果が偽だったし、次に行けばJSON
、3-ロールバックにより送信された結果を確認
2 - SQLトランザクションを開始
の1-:私のコードの主なプロセスは、以下の手順を実行します。それが真であるかどうかを問い合わせる。
エラーが発生せず、すべての結果がOKだった場合、トランザクションをコミットします。私はSQLSRVドライバver.2のを使用していPHPとSQLSRVドライバの「新しいトランザクションは許可されていません」というエラーは何ですか?

[Microsoft][SQL Server Native Client 10.0][SQL Server] New transaction is not allowed because there are other threads running in the session

// This is my pseudo code 
if (sqlsrv_begin_transaction($sqlsrv->sqlsrvLink) === true) { 

    $firstQuery = sqlsrv_query($stmt1); 
    if (!$firstQuery) { 
    sqlsrv_rollback(); 
    } else { 
    $nextQuery = sqlsrv_query($stmt2); 
    if (!$nextQuery) { 
     sqlsrv_rollback(); 
    } else { 
     sqlsrv_commit(); 
    } 
    } 

} else { 
    print_r(sqlsrv_errors()); // Here is where I get the error below. 
} 

私が持っている問題は、このエラーです。
このエラーは何ですか?どうすれば解決できますか?

私は、以下の方法を含むindex.phpの最初の部分に自分のSQLSRVクラスが含まれていました。

function __construct($dbServerName,$dbUsername,$dbPassword,$dbName) 
{ 
    $connectionInfo = array("Database"=> $dbName, "CharacterSet" => "UTF-8"); 
    $this->sqlsrvLink = sqlsrv_connect($dbServerName, $connectionInfo); 
    if ($this->sqlsrvLink === false) { 
     $this->sqlsrvError = sqlsrv_errors(); 
    } 
} 

function __destruct() 
{ 
    sqlsrv_close($this->sqlsrvLink); 
} 
+0

このエラーはいつ発生しますか?「sqlsrv_query($ stmt1);」の前後に?この疑似コードの前のどこかに "sqlsrv_begin_transaction"がある可能性はありますか? – JScoobyCed

+0

@JScoobyCed:いいえ、現在の場所にある必要があります。これは警告ではありません。それは誤りです。それで、すべてのプロセスが停止します。 2つのクエリは実行されません。 –

+0

私は、この擬似コードの前に "sqlsrv_begin_transaction"をもう一度呼び出すことがあるので、別のトランザクションが既に開始されていると苦情を言います。コードのデバッグを試しましたので、エラーのコード行を特定できます。 – JScoobyCed

答えて

1

を私はあなたがSQL Serverに接続したいときにtrueMultipleActiveResultSetsを設定すべきだと思う:

をあなたのエラーから
$conn = sqlsrv_connect('127.0.0.1', array 
     (
      'Database' => 'Adventureworks', 
      'MultipleActiveResultSets' => true, // MARS ENABLED 
     )); 

http://php.net/manual/de/ref.pdo-sqlsrv.connection.php

+1

私の問題は解決していませんでした... –

0

は、それは新しいトランザクションIを開始しているように思える$nextQuery = sqlsrv_query($stmt2); n同じセッション。あなたは第二を開始する前に!$firstQueryをコミットできますか?

+1

コリン、なんでこの取引は?プロセスのすべての部分が業務で成功することができれば、トランザクションをコミットする必要があります。 –

関連する問題