我正在尝试从mssqlserver获取按当前时间筛选的列数据。细胞有 datetime
格式。但我得到的是空洞的回应。哪里出错了?
<?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));
}
?>
1条答案
按热度按时间u0sqgete1#
您需要更改语句并使用参数化查询来防止可能的sql注入问题。正如文档中所提到的,sqlsrv\u query函数非常适合于一次性查询,除非有特殊情况,否则它应该是执行查询的默认选择。此函数提供了一种简化的方法,用最少的代码执行查询。sqlsrv\u query函数同时执行语句准备和语句执行,并可用于执行参数化查询。
当您将参数用于
datetime
值,有两个选项:通过
datetime
值作为文本,使用明确的datetime
值的格式$datetimenow
变量(在您的case函数中)current_time
从格式化的php datetime对象返回文本形式的当前时间。通过
datetime
值作为使用扩展参数语法的php datetime对象。PHP:
附加说明:
从sql server检索数据时
datetime
值以php形式返回datetime
对象,因此需要使用DateTime->format()
或设置'ReturnDatesAsStrings'
连接字符串或语句级别的选项。当您将绑定值发送到十进制或数字列(也在文档中提到)时,建议使用字符串作为输入,以确保精度和准确性,因为php对浮点数的精度有限。这同样适用于bigint列,尤其是当值超出整数范围时。