ホームページ  >  記事  >  バックエンド開発  >  PHP プリペアドステートメントデータベースの更新での不正なパラメータ順序を解決するにはどうすればよいですか?

PHP プリペアドステートメントデータベースの更新での不正なパラメータ順序を解決するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-21 20:06:29683ブラウズ

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

データベース更新用の 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>

具体的なお問い合わせについて:

  1. 発生した「0 行が挿入されました」メッセージは、次の原因によるものです。パラメータの順序を逆にします。 id パラメータと content パラメータが間違った順序でバインドされていたため、WHERE 句が一致する行がありませんでした。
  2. テーブルを更新するときは、必要なフィールドのみを変更することができます。テーブル内の他の列は変更されません。

以上がPHP プリペアドステートメントデータベースの更新での不正なパラメータ順序を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。