私は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);
}
このエラーはいつ発生しますか?「sqlsrv_query($ stmt1);」の前後に?この疑似コードの前のどこかに "sqlsrv_begin_transaction"がある可能性はありますか? – JScoobyCed
@JScoobyCed:いいえ、現在の場所にある必要があります。これは警告ではありません。それは誤りです。それで、すべてのプロセスが停止します。 2つのクエリは実行されません。 –
私は、この擬似コードの前に "sqlsrv_begin_transaction"をもう一度呼び出すことがあるので、別のトランザクションが既に開始されていると苦情を言います。コードのデバッグを試しましたので、エラーのコード行を特定できます。 – JScoobyCed