「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP プリペアドステートメントデータベースの更新での不正なパラメータ順序を解決するにはどうすればよいですか?

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

2024 年 11 月 8 日に公開
ブラウズ:743

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

データベース更新のための PHP プリペアド ステートメント

この説明は、SQL インジェクションなどの脆弱性を防ぐために PHP でプリペアド ステートメントを適切に利用することを中心に説明します。問題のコード ブロックの目的は、準備されたステートメントを使用して単一のフィールドでデータベース テーブルを更新することです。

提供されたコードでは、class.Scripts.inc ファイルの update() メソッドは準備されたステートメントを使用します。データダンプ テーブルを更新しようとするステートメント。ただし、bind_param() メソッド中のパラメーターの順序が間違っているため、実行は失敗します。現在のコードはパラメータを $id と $content の順序でバインドしますが、SQL ステートメントはパラメータを逆の順序でバインドするため、レコード識別が正しくなくなり、影響を受ける行がゼロになります。

以下の修正されたコードは、これを修正します。パラメータを正しい順序でバインドし、追加のエラー処理を提供することでエラーを解決します:

$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);

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

  1. 表示された「0 行が挿入されました」メッセージは期限切れですパラメータの順序を逆にします。 id パラメータと content パラメータが間違った順序でバインドされていたため、WHERE 句が一致する行がありませんでした。
  2. テーブルを更新するときは、必要なフィールドのみを変更することができます。テーブル内の他の列は変更されません。
リリースステートメント この記事は次の場所に転載されています: 1729512196 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3