データベース更新用の PHP プリペアド ステートメント
この説明は、SQL インジェクションなどの脆弱性を防ぐために PHP でプリペアド ステートメントを適切に利用することを中心に説明します。問題のコード ブロックの目的は、準備されたステートメントを使用して単一のフィールドでデータベース テーブルを更新することです。
提供されたコードでは、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 中国語 Web サイトの他の関連記事を参照してください。