1 回答

TA貢獻(xiàn)1884條經(jīng)驗 獲得超4個贊
您需要在語句中使用參數(shù)。正如文檔中提到的,sqlsrv_query()
?函數(shù)非常適合一次性查詢,并且應(yīng)該是執(zhí)行查詢的默認(rèn)選擇,除非有特殊情況。此函數(shù)提供了一種簡化的方法,可以使用最少的代碼執(zhí)行查詢。sqlsrv_query 函數(shù)同時執(zhí)行語句準(zhǔn)備和語句執(zhí)行,并且可用于執(zhí)行參數(shù)化查詢。
您需要通過以下方式之一傳遞參數(shù)值:
作為使用明確日期格式 (?
yyyymmdd
) 的文本,使用擴(kuò)展參數(shù)語法和適當(dāng)?shù)臄?shù)據(jù)類型綁定。
例如,根據(jù)問題中的代碼,使用日期的文本值:
<?php
// Connection
$server? ? = 'server,port';
$database? = 'database';
$uid? ? ? ?= 'uid';
$pwd? ? ? ?= 'pwd';
$cinfo = array(
? ?"ReturnDatesAsStrings" => true,
? ?"Database" => $database,
? ?"UID" => $uid,
? ?"PWD" => $pwd
);
$conn = sqlsrv_connect($server, $cinfo);
if ($conn === false) {
? ?echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
? ?exit;
}
// Test input
$from = (new DateTime('2020-07-02'))->format('Ymd');
$to? ?= (new DateTime('2020-07-03'))->format('Ymd');
// Statement
$sql = "
? ? SELECT *?
? ? FROM Database?
? ? WHERE (? <= [Date]) AND ([Date] <= ?)"
;
$params = array($from, $to);
$stmt = sqlsrv_query($conn, $sql, $params);
if($stmt == false){
? ? die( print_r( sqlsrv_errors(), true) );
}
echo $sql;
// Data
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) {
? ? echo $row[0].", ".$row[1]."<br />";
}
// End
sqlsrv_free_stmt($stmt);
?>
例如,根據(jù)問題中的代碼,使用 PHP 日期對象和適當(dāng)?shù)膮?shù)綁定:
<?php
// Connection
$server? ? = 'server,port';
$database? = 'database';
$uid? ? ? ?= 'uid';
$pwd? ? ? ?= 'pwd';
$cinfo = array(
? ?"ReturnDatesAsStrings" => true,
? ?"Database" => $database,
? ?"UID" => $uid,
? ?"PWD" => $pwd
);
$conn = sqlsrv_connect($server, $cinfo);
if ($conn === false) {
? ?echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
? ?exit;
}
// Test input
$from = new DateTime('2020-07-02');
$to? ?= new DateTime('2020-07-03');
// Statement
$sql = "
? ? SELECT *?
? ? FROM Database?
? ? WHERE (CONVERT(date, ?) <= [Date]) AND ([Date] <= CONVERT(date, ?))"
;
$params = array(
? ?array($from, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_DATETIME, SQLSRV_SQLTYPE_DATETIME),
? ?array($to, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_DATETIME, SQLSRV_SQLTYPE_DATETIME)
);
$stmt = sqlsrv_query($conn, $sql, $params);
if($stmt == false){
? ? die( print_r( sqlsrv_errors(), true) );
}
echo $sql;
// Data
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) {
? ? echo $row[0].", ".$row[1]."<br />";
}
// End
sqlsrv_free_stmt($stmt);
?>
- 1 回答
- 0 關(guān)注
- 140 瀏覽
添加回答
舉報