【问题标题】:SQL Returning FalseSQL 返回 False
【发布时间】:2016-11-01 13:05:00
【问题描述】:
$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 - bool(false) string(10) "2016-11-01" int(184) float(9.5) float(11)

我的 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))

我认为很明显,但我确实验证了数据库中确实有一条记录应该返回。

【问题讨论】:

  • 未引用的日期被解释为数学减法:2016 - 11 等?请出示$checkQuery的内容
  • 我的意思是字符串一旦发生插值,我们就可以看到发送到服务器的字符串。 (先修复日期问题)
  • 完成了,我也会清理 cmets。

标签: php sql-server


【解决方案1】:

来自official docs

如果使用前向游标(默认)或动态游标,则返回 FALSE。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多