」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何解決 PHP 準備語句資料庫更新中參數順序不正確的問題?

如何解決 PHP 準備語句資料庫更新中參數順序不正確的問題?

發佈於2024-11-08
瀏覽:145

How to Resolve Incorrect Parameter Order in PHP Prepared Statement Database Updates?

用於資料庫更新的PHP 準備語句

本次討論的重點是如何正確利用PHP 中的準備語句來防止SQL 注入等漏洞。相關程式碼區塊的目的是使用準備好的語句更新具有單一欄位的資料庫表。

在提供的程式碼中,class.Scripts.inc 檔案中的 update() 方法使用準備好的語句語句嘗試更新資料轉儲表。但是,由於bind_param()方法期間參數順序不正確,執行不成功。當前程式碼依照 $id 和 $content 的順序綁定參數,而 SQL 語句期望它們以相反的順序,導致記錄標識不正確並且影響零行。

下面更正的程式碼修正了這個問題透過以正確的順序綁定參數並提供額外的錯誤處理來解決錯誤:

$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
/* Always check whether the prepare() succeeded */
if ($stmt === false) {
    trigger_error($this->mysqli->error, E_USER_ERROR);
    return;
}

$id = 1;
/* Bind our params */
/* Bind variables in the same order as SQL params */
$stmt->bind_param('si', $content, $id);

/* Set our params */
/* No escaping needed when using prepared statements */
$content = $_POST['content'] ?: '';

/* Execute the prepared Statement */
$status = $stmt->execute();
/* Always check whether the execute() succeeded */
if ($status === false) {
    trigger_error($stmt->error, E_USER_ERROR);
}

printf("%d Row inserted.\n", $stmt->affected_rows);

關於您的具體查詢:

  1. 您遇到的「0 Rows Inserted」訊息是由於到相反的參數順序。 id和content參數綁定的順序不正確,導致WHERE子句符合任何行。
  2. 更新表時,只修改需要的欄位是可以接受的。表中其他欄位保持不變。
版本聲明 本文轉載於:1729512196如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • ## 如何在 Go 中複製稀疏檔案而不擴展它們?
    ## 如何在 Go 中複製稀疏檔案而不擴展它們?
    使用io.Copy() 讓稀疏檔案變得巨大問題使用io.Copy() 複製稀疏檔案時,它們經常會膨脹了解稀疏文件的本質io.Copy() 傳輸原始字節,這會掩蓋稀疏文件中存在的漏洞- 沒有數據的空間實際上居住著。此資訊無法透過標準系統呼叫(如 read(2))存取。因此,io.Copy() 無法保持...
    程式設計 發佈於2024-11-08
  • 如何透過 PDO 傳遞數組參數並使用 LIMIT 子句
    如何透過 PDO 傳遞數組參數並使用 LIMIT 子句
    傳遞陣列參數並在PDO 中使用LIMIT 子句處理資料庫查詢時,將參數陣列傳遞給使用LIMIT 子句時的PDO 語句。然而,當使用 bindParam 方法設定各個參數時,這可能具有挑戰性。 困境出現挑戰是因為 LIMIT 子句需要綁定特定的數值,而執行方法需要一個命名參數陣列。這種不相容性導致兩種...
    程式設計 發佈於2024-11-08
  • 使用 CSS 技巧立即提高行動可用性
    使用 CSS 技巧立即提高行動可用性
    想要防止使用者意外放大您的網站?使用這個簡單的元標記在行動裝置上停用雙擊縮放: 這讓您的行動網站感覺更像是本機應用程式。你在你的專案中嘗試過這個嗎?
    程式設計 發佈於2024-11-08
  • Chrome擴充功能開發:如何開啟頁面右側和頂部的popup.html
    Chrome擴充功能開發:如何開啟頁面右側和頂部的popup.html
    預設在擴充功能圖示下方開啟彈出窗口,我們可以透過建立新視窗來更改位置 chrome.action.onClicked.addListener(async (tab) => { openPopup(tab) }); const openPopup = async (tab) => ...
    程式設計 發佈於2024-11-08
  • 如何在 Bootstrap 中輕鬆水平居中影像?
    如何在 Bootstrap 中輕鬆水平居中影像?
    Bootstrap 圖像居中綜合指南在網頁上水平居中圖像對於實現平衡和視覺吸引力通常至關重要設計。當使用流行的 Bootstrap 框架時,您可能很難找到最有效的方法來實現這種對齊。在本文中,我們將探索使用 Bootstrap 將影像死點置中的簡單解決方案。 .center-block 類別Twit...
    程式設計 發佈於2024-11-08
  • 掌握 Golang:基本程式教學合集
    掌握 Golang:基本程式教學合集
    透過這套全面的程式設計教學深入探索 Golang 的世界!無論您是經驗豐富的開發人員還是剛開始 Golang 之旅,這些精心策劃的課程都將為您提供成為熟練 Gopher 所需的基本技能和知識。 ? Golang HTTP 請求處理 探索 Golang 中 net/http 套件的強...
    程式設計 發佈於2024-11-08
  • 在 C++ 中可以將 void 指標轉換為函式指標嗎?
    在 C++ 中可以將 void 指標轉換為函式指標嗎?
    在C 中將空指標轉換為函數指標將dlsym() 等函數傳回的空指標轉換為函數指標在C中並不簡單。預設情況下,C 98/03 中禁止此類直接轉換。 限制原因在 C 98/03 中,void* 指針用於引用對象,不是函數或成員指針。 C 中的有條件支援0x在 C 0x 中,實作可以選擇支援將 void*...
    程式設計 發佈於2024-11-08
  • 如何在 C++ 中使用enable_if 實作條件成員函式重載?
    如何在 C++ 中使用enable_if 實作條件成員函式重載?
    選擇具有不同enable_if條件的成員函數在C語言中,enable_if是一個工具,用於根據是否有條件啟用或停用某些程式碼模板參數滿足特定條件。當您想要根據模板參數自訂類別或函數的行為時,這可能很有用。 在給定的範例中,目標是建立一個成員函數 MyFunction,該函數根據範本是否參數T是否為整...
    程式設計 發佈於2024-11-08
  • 如何修正 phpMyAdmin 中的「使用者\'Root\'@\'localhost\'\」存取被拒絕的錯誤?
    如何修正 phpMyAdmin 中的「使用者\'Root\'@\'localhost\'\」存取被拒絕的錯誤?
    如何解決phpMyAdmin 中的「存取被拒絕」錯誤如果遇到「存取被拒絕」存取phpMyAdmin 時出現「for user 'root'@'localhost' (using password: NO)」錯誤,通常表示'root' 使用者的密碼設定或...
    程式設計 發佈於2024-11-08
  • Miva 的日子:第 15 天
    Miva 的日子:第 15 天
    這是 100 天 Miva 編碼挑戰中的第 15 天,雖然時間過得很快,但它幫助我大大提高了我的 HTML、CSS 和 JavaScript 技能。 今天,我學習了JavaScript中的兩個概念。顯示物件屬性和 JavaScript 事件。它們對於添加資料以及保持網頁的響應性和互動性非常重要。 ...
    程式設計 發佈於2024-11-08
  • 將 JavaScript 轉換為 TypeScript 的多年經驗:我的關懷意見
    將 JavaScript 轉換為 TypeScript 的多年經驗:我的關懷意見
    I started my JS career in 2015, spent a year working exclusively with it, and then transitioned to TypeScript. I’d love to say 'And never looked back ...
    程式設計 發佈於2024-11-08
  • x86 彙編中的「鎖定」指令是否無限期地保留匯流排?
    x86 彙編中的「鎖定」指令是否無限期地保留匯流排?
    理解x86彙編中的“Lock”指令x86彙編中的“lock”指令是一個前綴,它強制後續指令對總線的獨佔所有權。這可確保 CPU 在該指令的持續時間內完全控制高速緩存行。 停用總線鎖定與通常的理解相反,「lock」前綴不會導致 CPU 鎖定無限期的公車。執行後續指令後,鎖會被釋放。這允許 CPU 僅在...
    程式設計 發佈於2024-11-08
  • Top itemmap Scraper 你該知道的 4
    Top itemmap Scraper 你該知道的 4
    有時需要組織並包含在新網站設計中的資訊量可能會令人難以承受,從而使任務變得更加困難。網站地圖是一個有用的規劃工具,可以幫助組織和簡化網站上需要的材料並刪除任何不需要的頁面。此外,精心設計的網站地圖可為訪客提供正面的體驗,從而提高轉換率。 多年來,最好的網頁設計方法一直包括網站地圖;因此,它們並不是...
    程式設計 發佈於2024-11-08
  • 如何在 Web 瀏覽器中追蹤 XMLHttpRequest 的進度更新?
    如何在 Web 瀏覽器中追蹤 XMLHttpRequest 的進度更新?
    取得 XMLHttpRequest 的進度更新Web 瀏覽器為用戶端伺服器資料交換提供 XMLHttpRequest (XHR) 物件。雖然標準 XHR API 缺乏固有的進度追蹤功能,但有一些方法可以監控資料傳輸的進度。 上傳位元組數:XHR 公開 xhr.upload。 onprogress 事...
    程式設計 發佈於2024-11-08
  • 如何在 JavaScript 中向回呼函數傳遞參數?
    如何在 JavaScript 中向回呼函數傳遞參數?
    在JavaScript 中向回調函數傳遞參數在JavaScript 中,回呼函數通常用於在某個事件發生後執行特定任務。在定義這些函數時,通常需要向它們傳遞相關資料或參數。 傳遞參數的簡單方法是在呼叫回呼函數時將它們明確地設定為實參。例如:function tryMe(param1, param2) ...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3