0

SQLSRV クエリが実行されないのはなぜですか?

IF ELSE の失敗で想定されるようなものは何もエコーしません。誰かが私の問題を理解していますか? 何が悪いのかわかりません。うまくいくはずです。

PHP コード:

/* IF NULL EXISTS of DATEIN or DATEOUT then UPDATE else INSERT*/
$datein_s="SELECT TOP 1 datein FROM clocked WHERE datein IS NULL AND userid=? ORDER BY datein DESC";
$datein_sr=sqlsrv_query($dbconnect,$datein_s,$params);
$datein=sqlsrv_fetch($datein_sr);
$datein_q1="UPDATE clocked SET datein=GETDATE() WHERE EXISTS(SELECT TOP 1 datein FROM clocked WHERE datein IS NULL AND userid=? ORDER BY datein DESC);";
$datein_qr1=sqlsrv_query($dbconnect,$datein_q1,$params);
$datein_q2="INSERT INTO clocked(datein) VALUES(GETDATE(),?);";
$datein_qr2=sqlsrv_query($dbconnect,$datein_q2,$params);

$dateout_s="SELECT TOP 1 dateout FROM clocked WHERE dateout IS NULL AND userid=? ORDER BY dateout DESC";
$dateout_sr=sqlsrv_query($dbconnect,$dateout_s,$params);
$dateout=sqlsrv_fetch($dateout_sr);
$dateout_q1="UPDATE clocked SET dateout=GETDATE() WHERE EXISTS(SELECT TOP 1 dateout FROM clocked WHERE dateout IS NULL AND userid=? ORDER BY dateout DESC);";
$dateout_qr1=sqlsrv_query($dbconnect,$dateout_q1,$params);

if($datein===null)
{
$datein_qr1;
}
else if ($dateout===null)
{
$dateout_qr1;
}
else if ($datein===null&&$dateout===null)
{
$datein_qr1;
}
else if ($datein!==null&&$dateout!==null)
{
$datein_qr2;
}
else
{
echo "ERROR your query may be broken!";
}

/* END IF */
4

2 に答える 2

0

ここではロジックを完全にたどることはできませんが、問題は上部の行にあると思います:

$datein_qr2=sqlsrv_query($dbconnect,$datein_q2,$params);

クエリを実行しています-あなたがしたいことは、上部のクエリを初期化し、if ステートメントで適切なクエリを実行することだと思います。

$datein_qr1;

sqlsrv_query 行を if ステートメント内に移動する必要があります。

また、3 番目の if ステートメントには到達しません。

else if ($datein===null&&$dateout===null)

前の 2 つの if ステートメントで、datein と dateout が null かどうかを既に確認しています。

于 2012-05-04T20:02:56.940 に答える
0

奇妙なコードの断片:-)

あなたはこれを試すことができます

if($datein===null)
{
    $datein_q1="UPDATE clocked SET datein=GETDATE() WHERE EXISTS(SELECT TOP 1 datein FROM clocked WHERE datein IS NULL AND userid=? ORDER BY datein DESC);";
    sqlsrv_query($dbconnect,$datein_q1,$params);
}

またはクロージャー付き (>= PHP 5.3)

$datein_q1="UPDATE clocked SET datein=GETDATE() WHERE EXISTS(SELECT TOP 1 datein FROM clocked WHERE datein IS NULL AND userid=? ORDER BY datein DESC);";
$caller= function($query, $params = array()) use($dbconnect) {
    sqlsrv_query($dbconnect,$query,$params);
};

if($datein===null)
{
    $caller->__invoke($datein_q1, array();
}
于 2012-05-04T20:03:15.470 に答える