亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何根據檢索到的列類型動態地將正確的類型分配給 bind_param?

如何根據檢索到的列類型動態地將正確的類型分配給 bind_param?

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

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();

簡單、干凈、簡潔


查看完整回答
反對 回復 2023-04-15
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

您的代碼不應該嘗試猜測類型。您應該將所有內容綁定為字符串。99.99% 的時間它不會有任何區別。在某些邊緣情況下,實際類型會有所不同,但在這些情況下,您可以在知道類型應該是什么時對類型進行硬編碼。如果您猜測類型,那么您只會給您的軟件添加更多錯誤。

您從 HTML 表單收到的所有數據都是字符串類型。MySQL 根據上下文動態地進行類型轉換。為什么要費心在 PHP 中轉換值?只需將所有內容原封不動地發送給 MySQL,讓它決定類型應該是什么。


查看完整回答
反對 回復 2023-04-15
  • 2 回答
  • 0 關注
  • 139 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號