SQL インジェクションの回避
データベース クエリを実行する場合、プリペアド ステートメントはSQLインジェクションを防ぎます。これにより、セキュリティを損なうことなく、クエリにデータを動的に挿入できます。
単一フィールドの更新
コード スニペットでは、コンテンツという 1 つのフィールドのみを更新します。 UPDATE ステートメントで個々の列を選択的に更新できるため、これは許容されます。
適切なパラメーター バインド
プリペアド ステートメントでパラメーターを適切にバインドするには、次のことを確認することが重要です。コード内のデータ型は、MySQL ステートメントのデータ型と一致します。あなたの場合、次のようになります。
<code class="php">$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?"); $stmt->bind_param('is', $id, $content);</code>
bind_param() メソッドの「is」は、整数 (i) と文字列 (s) をバインドしていることを指定します。ただし、実際には次のコードを使用してコンテンツ変数を設定しています:
<code class="php">$content = isset($_POST['content']) ? $this->mysqli->real_escape_string($_POST['content']) : '';</code>
これは文字列を返します。この不一致によりエラーが発生する可能性があります。
修正:
問題を修正するには、次の変更を加えます:
<code class="php">if ($stmt === false) { trigger_error($this->mysqli->error, E_USER_ERROR); return; } $content = $_POST['content'] ?: ''; $stmt->bind_param('si', $content, $id); ```` **Additional Notes:** * Always remember to check for statement preparation errors using `if ($stmt === false)`. * Bind your parameters in the same order as they appear in your SQL statement. **Troubleshooting:** If you're still facing issues, ensure that: * Your MySQL connection is established correctly. * The table and column names in your statement are spelled correctly.</code>
以上がPHP プリペアド ステートメントを使用してデータベースを安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。