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

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

http://img3.mukewang.com/644254750001777205580415.jpg

http://img2.mukewang.com/6442547b000143c702780173.jpg

<?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));

}

?>


慕哥6287543
浏览 106回答 1
1回答

ITMISS

您需要更改语句并使用参数化查询来防止可能的 SQL 注入问题。如文档中所述,sqlsrv_query 函数非常适合一次性查询,除非有特殊情况,否则应该是执行查询的默认选择。此函数提供了一种简化的方法,可以用最少的代码执行查询。sqlsrv_query 函数同时进行语句准备和语句执行,可用于执行参数化查询。当您将参数用于datetime值时,您有两个选择:将值作为文本传递,使用变量值的datetime明确格式(在您的情况下,函数将当前时间作为来自格式化的 PHP datetime 对象的文本返回)。datetime$datetimenowcurrent_timedatetime使用扩展参数语法将值作为 PHP 日期时间对象传递。PHP:<?php$serverName = '';     // server name$cinfo = array(    "Database" => "", // database    "UID" => "",      // user    "PWD" => ""       // pass);$conn = sqlsrv_connect($serverName, $cinfo);if ($conn) {    echo "connected" . "<br/>";    // Datetime value in `yyyy-mm-ddThh:mi:ss` format    $datetimenow = current_time("Y-m-d\TH:i:00");    // or if you want a specific datetime value    //$datetimenow = '2020-05-30T14:10:00';    // Pass datetime value as text    $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 />';        }    }    // Pass datetime value as PHP datetime object    $sql = "SELECT * FROM dbo.GorElectroTrans WHERE GPS_datetime = ?";    $params = array(        array(           date_create_from_format('Y-m-d\TH:i:s', $datetimenow),           SQLSRV_PARAM_IN,            SQLSRV_PHPTYPE_DATETIME,            SQLSRV_SQLTYPE_DATETIME        )    );    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));}?>补充笔记:当您从 SQL Server 检索数据时,datetime值默认作为 PHP对象返回,因此您需要在连接字符串或语句级别使用或设置选项。datetimeDateTime->format()'ReturnDatesAsStrings'当您将绑定值发送到小数或数字列(也在文档中提到)时,建议使用字符串作为输入以确保精度和准确性,因为 PHP 对浮点数的精度有限。这同样适用于 bigint 列,尤其是当值超出整数范围时。
打开App,查看更多内容
随时随地看视频慕课网APP