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 语句内。

此外,永远不会到达第三个 if 语句:

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

您已经在检查前两个 if 语句中的 datein 和 dateout 是否为空。

于 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 回答