2 回答

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
猜測(cè)參數(shù)類(lèi)型總是有味道。而將所有參數(shù)設(shè)置為“s”在大多數(shù)情況下都可以正常工作。
所以讓我建議你另一種解決方案。使類(lèi)型顯式但可選。默認(rèn)情況下它將是“s”,但可以手動(dòng)定義類(lèi)型,就像我在mysqli 輔助函數(shù)中所做的那樣:
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;
}
當(dāng)您不需要任何特定類(lèi)型時(shí)(大部分時(shí)間),只需將它們排除在外:
$sql = "SELECT * FROM tmp_mysqli_helper_test WHERE id > ?";
$res = prepared_query($conn, $sql, [1])->get_result();
但是每次你需要它的時(shí)候,它已經(jīng)在這里并且是明確的,所以你可以設(shè)置你想要的確切類(lèi)型:
$sql = "SELECT * FROM tmp_mysqli_helper_test WHERE id > ?";
$res = prepared_query($conn, $sql, [1], "i")->get_result();
簡(jiǎn)單、干凈、簡(jiǎn)潔

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
您的代碼不應(yīng)該嘗試猜測(cè)類(lèi)型。您應(yīng)該將所有內(nèi)容綁定為字符串。99.99% 的時(shí)間它不會(huì)有任何區(qū)別。在某些邊緣情況下,實(shí)際類(lèi)型會(huì)有所不同,但在這些情況下,您可以在知道類(lèi)型應(yīng)該是什么時(shí)對(duì)類(lèi)型進(jìn)行硬編碼。如果您猜測(cè)類(lèi)型,那么您只會(huì)給您的軟件添加更多錯(cuò)誤。
您從 HTML 表單收到的所有數(shù)據(jù)都是字符串類(lèi)型。MySQL 根據(jù)上下文動(dòng)態(tài)地進(jìn)行類(lèi)型轉(zhuǎn)換。為什么要費(fèi)心在 PHP 中轉(zhuǎn)換值?只需將所有內(nèi)容原封不動(dòng)地發(fā)送給 MySQL,讓它決定類(lèi)型應(yīng)該是什么。
- 2 回答
- 0 關(guān)注
- 136 瀏覽
添加回答
舉報(bào)