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

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

DDD
リリース: 2024-10-21 20:06:29
オリジナル
783 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート