代码之家  ›  专栏  ›  技术社区  ›  geeth

根据PHP和SQL Server中的日期时间从表中查找活动记录

  •  2
  • geeth  · 技术社区  · 6 年前

    我需要从我的表中提取活动记录。记录处于活动状态意味着它没有过期,并且生成记录后的过期时间为2分钟。我正在使用SQL Server数据库。 这是我桌子的结构 enter image description here

    我的代码如下

    $serverName = "xxx.xx.x.xxx";
    $connectionInfo = array( "Database"=>"xxxxxx", "UID"=>"xxxxx", "PWD"=>"xxxxxx");
    $conn = sqlsrv_connect($serverName, $connectionInfo);   
    if($conn)
        echo 'success';
    else 
        echo "failed";
    
    $currentTime = date('Y-m-d H:i:s');
    $query = "SELECT * FROM ApiTockenMaster WHERE Tocken = ? AND DateGenerated <= ? AND Status = ?";
    $params = array("xxxxxxx", "2018-09-03 18:06:17.7600000", "Generated");
    $result = sqlsrv_query( $conn, $query, $params);
    $row = sqlsrv_fetch_array($result);
    echo '<pre>'; print_r($row);
    echo count($row);
    

    我需要的条件是 DateGenerated 作为

    currenttime <= DateGenerated + 2 minutes
    

    如何在查询中实现此条件

    3 回复  |  直到 6 年前
        1
  •  2
  •   Zhorov    6 年前

    另一种可能的方法是让SQL Server使用 CURRENT_TIMESTAMP DATEADD() :

    <?php
    # Connection
    $serverName = "xxx.xx.x.xxx";
    $connectionInfo = array(
        "Database"=>"xxxxxx", 
        "UID"=>"xxxxx", 
        "PWD"=>"xxxxxx"
    );
    $conn = sqlsrv_connect($serverName, $connectionInfo);   
    if ($conn) {
        echo "Connection established.<br />";
    } else {
        echo "Connection could not be established.<br />";
        die(print_r(sqlsrv_errors(), true));
    }
    
    # Statement
    $query = "
        SELECT * 
        FROM ApiTockenMaster 
        WHERE 
            (Tocken = ?) AND 
            (CURRENT_TIMESTAMP <= DATEADD(mi, 2, DateGenerated)) AND 
            (Status = ?)
    ";
    $params = array(
        "xxxxxxx", 
        "Generated"
    );
    $result = sqlsrv_query($conn, $query, $params);
    if ($result === false){
        die(print_r(sqlsrv_errors(), true));
    }
    
    # Result
    $row = sqlsrv_fetch_array($result);
    echo '<pre>'; 
    print_r($row);
    echo count($row);
    ?>
    
        2
  •  1
  •   gotqn user3521065    6 年前

    你可以用 DATEADD :

    currenttime <= DATEADD(MINUTE, 2, DateGenerated);
    
        3
  •  0
  •   Orgil    6 年前

    试试这个,我还没测试过,不过应该是这样的。

    $currenttime= date("Y-m-d H:i:s",strtotime(date("Y-m-d H:i:s")." +2 minutes"));
    $params = array("xxxxxxx", $currenttime, "Generated");