2016-11-01 234 views
1
$checkQuery = "SELECT Id FROM Events 
         WHERE Date = '$date' 
         AND VehId = $vehicleId 
         AND ((StartTime BETWEEN $timeOut AND $timeIn) 
         OR (EndTime BETWEEN $timeOut AND $timeIn))"; 
$checkResults = sqlsrv_query($conn, $checkQuery); 
if (sqlsrv_num_rows($checkResults) > 0) 
    { 
     //do some stuff where the vehicle is already reserved. 
    } else { // this always executes. 
     var_dump($rowCounts, $date, $vehicleId, $timeOut, $timeIn); 
     //insert the new reservation. 
    } 

//的var_dump - 布尔(假)字符串(10) “2016年11月1日” INT(184)浮点(9.5)浮(11)SQL返回false

我的SQL查询不断返回false ,虽然我没有得到我期望的参数是1错误?总是执行else语句。因此,我的查询中出现了一些错误,但下面是我的小提琴,它表明它按预期工作?我的目标是查询数据库,如果有任何结果回来,它不会插入一个新的记录,因为车辆应该已经保留。任何帮助表示赞赏! http://sqlfiddle.com/#!3/a86be/6

SELECT Id FROM Events 
    WHERE Date = '2016-11-01' 
    AND VehId = 184 
    AND ((StartTime BETWEEN 9.5 AND 11) 
    OR (EndTime BETWEEN 9.5 AND 11)) 

我认为很明显,但我没有验证其实也有一个数据库中的记录,它应该返回。

+0

非上市日期被解释为数学减法2016 - 11等?请显示'$ checkQuery'的内容 –

+0

我的意思是字符串一旦发生内插,所以我们可以看到发送给服务器的字符串。 (先修复日期问题) –

+0

完成,我也会清理注释。 – DavidG

回答

1

official docs

时,若正向光标(默认值)或动态光标被使用,则返回FALSE。

所以,你需要指定一个不同的光标,这样做是这样的:

$checkResults = sqlsrv_query(
    $conn, 
    $checkQuery, 
    array(), 
    array('Scrollable' => 'buffered'));