データベース更新のための 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);
具体的なお問い合わせについて:
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3