无法从具有日期时间格式的col中获取数据

问题描述 投票:1回答:1

我正在尝试从MS SQL Server获取按当前时间过滤的列数据。单元格具有datetime格式。但是我得到了空洞的回应。哪里有错?

enter image description here

enter image description here

<?php
$serverName = ''; // server name
$cinfo      = array(
    "Database" => "", // database
    "UID" => "", // user
    "PWD" => "" // pass
);
$conn       = sqlsrv_connect($serverName, $cinfo);

if ($conn) {
    echo "connected" . "<br/>";
    $datetimenow = current_time("d.m.Y H:i"); // wordpress function
    echo $datetimenow . "<br/>"; // 30.05.2020 14:10
    if (($result = sqlsrv_query($conn, "SELECT * FROM dbo.GorElectroTrans WHERE GPS_datetime=$datetimenow")) !== false) {
        while ($obj = sqlsrv_fetch_object($result)) {
            echo $obj->Longitude . '<br />';
        }
    }
} else {
    die(print_r(sqlsrv_errors(), true));
}
?>
php sql sql-server sqlsrv
1个回答
0
投票

您需要考虑以下因素:

  • 在语句中使用参数。如documentation中所述,sqlsrv_query函数非常适合一次性查询,并且除非有特殊情况,否则应为执行查询的默认选择。此函数提供了一种精简的方法,可以用最少的代码执行查询。 sqlsrv_query函数同时执行语句准备和语句执行,并且可用于执行参数化查询。
  • 对于datetime变量的值使用明确的$datetimenow格式。注意,在您的情况下,函数current_time返回当前时间作为格式化的PHP datetime对象。
  • 请注意,datetime值默认为returned作为PHP datetime对象,因此您需要在连接字符串或语句级别设置'ReturnDatesAsStrings'选项。
  • PHP:

<?php
$serverName = '';     // server name
$cinfo = array(
    "Database" => "", // database
    "UID" => "",      // user
    "PWD" => ""       // pass
);
$conn = sqlsrv_connect($serverName, $cinfo);

if ($conn) {
    echo "connected" . "<br/>";
    $datetimenow = current_time("Y-m-d\TH:i:00");
    // or if you want a specific datetime value
    //$datetimenow = '2020-05-30T14:10:00';
    $sql = "SELECT * FROM dbo.GorElectroTrans WHERE GPS_datetime = ?";
    $params = array($datetimenow);
    if (($result = sqlsrv_query($conn, $sql, $params)) !== false) {
        while ($obj = sqlsrv_fetch_object($result)) {
            echo $obj->Longitude . '<br />';
        }
    }
} else {
    die(print_r(sqlsrv_errors(), true));
}
?>
© www.soinside.com 2019 - 2024. All rights reserved.