为什么我的SQLSRV查询没有执行?

时间:2012-05-04 19:46:27

标签: php sql

为什么我的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 */

2 个答案:

答案 0 :(得分: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是否为空。

答案 1 :(得分: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();
}