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

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

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

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]刪除
最新教學 更多>

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

Copyright© 2022 湘ICP备2022001581号-3