ホームページ  >  に質問  >  本文

PDO ループを使用して複数行のデータを更新する

複数行のデータを取得するフォームがあり、各項目にはユーザーが特定の項目についてコメントできるテキスト領域があります。返される項目の数は可変であり、一部またはすべてのボックスにコメントを残す必要はありません。

リーリー

echo ステートメントは、ユーザーが他のユーザーが入力した内容を変更できるため、データベースに現在保存されている内容をテキスト領域に入力します。

フォーム処理ページに渡されると、これが返されます..

リーリー

つまり、配列は正しく渡されているようです。このコードを使用してデータベースを更新しています

リーリー

しかし、これはまったく更新されていないようですが、どこで間違ったのでしょうか?

###どうもありがとうございます###
P粉384366923P粉384366923380日前785

全員に返信(2)返信します

  • P粉704066087

    P粉7040660872023-10-25 09:13:24

    いくつかのこと:

    1. エラーが発生したときに PDOException をスローするように PDO を設定します。これによりデバッグが容易になります。
    2. プリペアド ステートメントのポイントは、異なる変数を使用して複数回呼び出すことができるため、一度だけ準備して複数回呼び出すだけで済むことです。パフォーマンスも大幅に向上します。

    コード:

    リーリー

    返事
    0
  • P粉994092873

    P粉9940928732023-10-25 00:17:28

    <textarea name="comment[<?=$f1?>]" cols="25" rows="2"><?=$f2?></textarea>
    
    <?php
    $dsn = "mysql:host=xxxx;dbname=xxxxx";
    $opt = array(
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    );
    $conn = new PDO($dsn, $username, $password, $opt);
    
    $sql  = "UPDATE reservations SET comment=? WHERE tableid= ?";
    $stmt = $conn->prepare($sql);
    
    foreach ($_POST["comment"] as $id => $comment) {
        if ($comment) {
            $stmt->execute([$comment, $id]);
        }
    }

    返事
    0
  • キャンセル返事