第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何根據(jù)檢索到的列類(lèi)型動(dòng)態(tài)地將正確的類(lèi)型分配給 bind_param?

如何根據(jù)檢索到的列類(lèi)型動(dòng)態(tài)地將正確的類(lèi)型分配給 bind_param?

PHP
慕田峪7331174 2023-04-15 10:45:01
背景資料:我正在創(chuàng)建一個(gè)類(lèi)來(lái)為我處理某些查詢。其中一個(gè)查詢是 SELECT 查詢,用戶可以在其中根據(jù)子句選擇某些內(nèi)容。我成功地檢索了列的 TYPES,但不知道如何根據(jù)列的 TYPE 實(shí)際決定應(yīng)該給哪個(gè) TYPE bind_param()(第一個(gè)參數(shù))。我最初的計(jì)劃是降低成本并簡(jiǎn)單地硬編碼如果檢索到的列類(lèi)型是某種類(lèi)型,則應(yīng)該給出哪個(gè)參數(shù)。我最初想法的例子:if ($type === "varchar") {    $aVariable = "s";}//OR USE A SWITCH, BUT YOU GET THE IDEAbind_param($aVariable, $someOtherVar);然而,由于許多不同的原因,這并不是我滿意的事情。所以我的問(wèn)題是:?jiǎn)栴}: 如何使用列 TYPES(如果可能)來(lái)確定給定的參數(shù)是否bind_param()應(yīng)該是以下類(lèi)型之一:“s、i、d、b”,而不必硬編碼檢索到的類(lèi)型 =某封信。
查看完整描述

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)潔


查看完整回答
反對(duì) 回復(fù) 2023-04-15
?
qq_花開(kāi)花謝_0

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)該是什么。


查看完整回答
反對(duì) 回復(fù) 2023-04-15
  • 2 回答
  • 0 關(guān)注
  • 136 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)