用於資料庫更新的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>
關於您的具體查詢:
以上是如何解決 PHP 準備語句資料庫更新中參數順序不正確的問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!