2 回答

TA貢獻1812條經驗 獲得超5個贊
您需要考慮以下事項:
您需要使用參數化語句來防止可能的 SQL 注入問題。正如文檔中提到的,該
sqlsrv_query()
函數非常適合一次性查詢,并且應該是執行查詢的默認選擇,除非有特殊情況。此函數提供了一種簡化的方法,可以使用最少的代碼執行查詢。sqlsrv_query 函數執行語句準備和語句執行,并且可用于執行參數化查詢。默認情況下
smalldatetime
,datetime
、date
、 、time
、datetime2
和datetimeoffset
類型將作為 PHP DateTime 對象返回,但可以通過'ReturnDatesAsStrings'
在連接字符串或語句級別設置選項來更改此行為。
如果您確定日期/時間值作為 PHP DateTime 對象返回,您有兩個選擇:
使用明確的格式將日期時間值作為文本傳遞(例如
2020-07-22T12:00:00.000
)使用調用參數的擴展語法將日期時間值作為 PHP DateTime 對象傳遞
sqlsrv_query()
。
示例(日期時間值作為文本傳遞):
<?php
// SELECT statement
$sql3? = "SELECT * FROM USERS";
$stmt3 = sqlsrv_query($conn, $sql3 , $params, $options);
if ($stmt3 === false) {
? ? echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
? ? exit;
}? ?
// INSERT statements
while ($row = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)) {?
? ? $sql2 = "
? ? ? ? INSERT INTO USER (USER_ID, USER_NOM, USER_DATE)?
? ? ? ? VALUES (?, ?, ?)
? ? ";
? ? $params = array(
? ? ? ?$row['USER_ID'],?
? ? ? ?$row['USER_NOM'],?
? ? ? ?$row['USER_DATE']->format('Y-m-d\TH:i:s.v'));
? ? );
? ? $stmt2 = sqlsrv_query($conn, $sql2 , $params);
}
?>
示例(日期時間值作為 PHP DateTime 對象傳遞):
<?php
// SELECT statement
$sql3? = "SELECT * FROM USERS";
$stmt3 = sqlsrv_query($conn, $sql3 , $params, $options);
if ($stmt3 === false) {
? ? echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
? ? exit;
}? ?
// INSERT statements
while ($row = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)) {?
? ? $sql2 = "
? ? ? ? INSERT INTO USER (USER_ID, USER_NOM, USER_DATE)?
? ? ? ? VALUES (?, ?, ?)
? ? ";
? ? $params = array(
? ? ? ? array($row['USER_ID'], SQLSRV_PARAM_IN),
? ? ? ? array($row['USER_NOM'], SQLSRV_PARAM_IN),
? ? ? ? array($row['USER_DATE'], SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_DATETIME, SQLSRV_SQLTYPE_DATETIME)
? ? );
? ? $stmt2 = sqlsrv_query($conn, $sql2 , $params);
}
?>

TA貢獻1776條經驗 獲得超12個贊
Datetime
要插入到 type 中的值,Datetime
應采用 'YYYY-MM-DD HH:MM:SS' 格式。
支持的范圍是“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。
- 2 回答
- 0 關注
- 144 瀏覽
添加回答
舉報