1

私はここ数時間頭を壁にぶつけていますが、どこを見ればよいか分かっていれば、答えは簡単だと思います。

完全に機能する MS SQL 2005 のコンパイル済みストアド プロシージャがあります。私はそれをテストしましたが、エラーはまったくありません。

ただし、ここに示す PHP インクルード ファイルから同じプロシージャを呼び出すと、ストアド プロシージャが実行を開始したように見えます (mssql トレースは、呼び出しが正しく行われたことを示しています)。途中で停止します。時々、15 件のレコードのうち 10 件が更新されます。また、14 点中 5 点を取ることもあります。

トレース ウィンドウから実行されたコマンドをコピーして、MS SQL Management Studio で直接実行すると、完全に機能します。これにより、ある種のタイムアウトであると思われますか、それとも手順が実行される前に接続を閉じているので、MS SQL 2005 は終了する必要があると考えていますか?

<?php
session_start();
require ('../includes/config.inc.php'); 
require('../includes/mssql.php');

function include_booking($box, $offeredtolocumid, $surgery, $rate) {
    $dbc2 = mssql_connect(DB_HOST, DB_USER, DB_PASSWORD);
    $q2 = "exec WEB_Surgery_Box_OfferBoxtoLocum '".$box."', '".$offeredtolocumid."', '".$surgery."'";
    $myresult = mssql_query($q2 ,$dbc2);

}     
    /* set out document type to text/javascript instead of text/html */
    header("Content-type: text/javascript");

    $offeredtolocumid = $_GET["locumid"];
    //$rate = $_GET["rate"];
    $rate = 15.99;
    $surgery = $_SESSION['surgeryid'];
    $box = $_SESSION['currentbox'];

    include_booking($box, $offeredtolocumid, $surgery, $rate);

    ?>

私は PHP / MS SQL ビットに慣れていないので、上記のコードが決して完璧ではないことを理解しています。

問題なく動作する他の多くのプロシージャ コールがあります。これだけではありません。MS SQL サーバーは、この手順を完了するのに平均 0.1 秒かかります。誰かが答えてくれることを願っています。

ありがとうニール

4

1 に答える 1

0

今日、多くのテストを行い、SET NO COUNT オプションを削除した結果、手順が再びクラッシュしました。これが問題であると確信しています。

明確にするために。PHP から MS SQL ストアド プロシージャを呼び出すときは、SET NO COUNT を使用して、望ましくないものが返されないようにする必要があります。

ありがとう。

于 2013-03-26T20:48:37.583 に答える