1 回答

TA貢獻1871條經(jīng)驗 獲得超8個贊
您需要更改語句并使用參數(shù)化查詢來防止可能的 SQL 注入問題。如文檔中所述,sqlsrv_query 函數(shù)非常適合一次性查詢,除非有特殊情況,否則應(yīng)該是執(zhí)行查詢的默認選擇。此函數(shù)提供了一種簡化的方法,可以用最少的代碼執(zhí)行查詢。sqlsrv_query 函數(shù)同時進行語句準備和語句執(zhí)行,可用于執(zhí)行參數(shù)化查詢。
當您將參數(shù)用于datetime
值時,您有兩個選擇:
將值作為文本傳遞,使用變量值的
datetime
明確格式(在您的情況下,函數(shù)將當前時間作為來自格式化的 PHP datetime 對象的文本返回)。datetime
$datetimenow
current_time
datetime
使用擴展參數(shù)語法將值作為 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 檢索數(shù)據(jù)時,
datetime
值默認作為 PHP對象返回,因此您需要在連接字符串或語句級別使用或設(shè)置選項。datetime
DateTime->format()
'ReturnDatesAsStrings'
當您將綁定值發(fā)送到小數(shù)或數(shù)字列(也在文檔中提到)時,建議使用字符串作為輸入以確保精度和準確性,因為 PHP 對浮點數(shù)的精度有限。這同樣適用于 bigint 列,尤其是當值超出整數(shù)范圍時。
- 1 回答
- 0 關(guān)注
- 122 瀏覽
添加回答
舉報