2 回答

TA貢獻1943條經驗 獲得超7個贊
猜測參數類型總是有味道。而將所有參數設置為“s”在大多數情況下都可以正常工作。
所以讓我建議你另一種解決方案。使類型顯式但可選。默認情況下它將是“s”,但可以手動定義類型,就像我在mysqli 輔助函數中所做的那樣:
function prepared_query($mysqli, $sql, $params, $types = "")
{
? ? $types = $types ?: str_repeat("s", count($params));
? ? $stmt = $mysqli->prepare($sql);
? ? $stmt->bind_param($types, ...$params);
? ? $stmt->execute();
? ? return $stmt;
}
當您不需要任何特定類型時(大部分時間),只需將它們排除在外:
$sql = "SELECT * FROM tmp_mysqli_helper_test WHERE id > ?";
$res = prepared_query($conn, $sql, [1])->get_result();
但是每次你需要它的時候,它已經在這里并且是明確的,所以你可以設置你想要的確切類型:
$sql = "SELECT * FROM tmp_mysqli_helper_test WHERE id > ?";
$res = prepared_query($conn, $sql, [1], "i")->get_result();
簡單、干凈、簡潔

TA貢獻1835條經驗 獲得超7個贊
您的代碼不應該嘗試猜測類型。您應該將所有內容綁定為字符串。99.99% 的時間它不會有任何區別。在某些邊緣情況下,實際類型會有所不同,但在這些情況下,您可以在知道類型應該是什么時對類型進行硬編碼。如果您猜測類型,那么您只會給您的軟件添加更多錯誤。
您從 HTML 表單收到的所有數據都是字符串類型。MySQL 根據上下文動態地進行類型轉換。為什么要費心在 PHP 中轉換值?只需將所有內容原封不動地發送給 MySQL,讓它決定類型應該是什么。
- 2 回答
- 0 關注
- 139 瀏覽
添加回答
舉報