2016-11-01 273 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'));