首頁 >後端開發 >php教程 >如何解決 PHP 準備語句資料庫更新中參數順序不正確的問題?

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

DDD
DDD原創
2024-10-21 20:06:29785瀏覽

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

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

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

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

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

<code class="php">$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);</code>

關於您的具體查詢:

  1. 您遇到的「0 Rows Inserted」訊息是由於顛倒的參數順序。 id 和 content 參數綁定的順序不正確,導致 WHERE 子句符合任何行。
  2. 更新表時,只修改需要的欄位是可以接受的。表中的其他欄位將保持不變。

以上是如何解決 PHP 準備語句資料庫更新中參數順序不正確的問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn