-2

私は2つのテーブルを持つデータベースを持っています:usersそしてpayments

usersテーブルに は

name
address
age
plan

paymentテーブルに は

name, address
age, plan
paidamount, transactionid
paiddate, receivedby
updatedby, authorisedby

Users テーブルには約 1000 行が含まれています。彼らは固定されており、貯蓄のために定期的に一定の金額を支払います。

ユーザーテーブルからフォームを含むWebページにユーザーデータを取得し、支払い情報をフォームに挿入し、以下のコードを使用した支払いテーブルにデータ全体を投稿する必要がありますが、ユーザーテーブルを投稿できませんこのフォームのデータ。

INSERT INTO Payments
    (ampaid, rcamo, userchar, totamo) VALUES 
    ('@ampaid', '@rcamo', '@userchar', '@totamo'),
    ('$_POST[ampaid]','$_POST[rcamo]','$_POST[userchar]','$_POST[totamo]');
 (SELECT name, ero, srno, address FROM Users WHERE srno='@srno'));

usersしかし、更新時にテーブルからフェッチできませんpayments

4

2 に答える 2

1

まずは

このため$_POST、クエリに値を含めないでください。PDOまたはMySQLiを使用して、それらをパラメータ化または準備します。(また、その構文は文字列に含めるには無効であるため、リテラル文字列をフィールドに追加しようとしています)'$_POST[var]'INT

ここでの本当の問題は、MySQL を使用する必要があるため、使用していないことです ( RDBMS。次のセクションを参照してください。


関係

外部キーを検索します。それらはテーブルをリンクするため、更新のたびにテーブルの内容を別のテーブルに挿入することは決してありません。これを行うには、ユーザーのテーブルに行の ID を挿入してから、 を使用する必要がありますJOIN


実際の挿入

一度に複数の値を挿入するには、次の構文を使用します。

INSERT INTO
    `table` (`col1`, `col2`) VALUES
    (:val1, :val2), (:val3, :val4)

そして、この配列を作成します:

Array(
    ":val1" => $val1,
    ":val2" => $val2, // etc.
);

これはPDOを使用しています。それを調べて、それを愛することを学びましょう。StackOverflow には、例と時折の落とし穴を含むリソースがたくさんあります。

入門

$params = array(
    ":ampaid" => $_POST["ampaid"], // tip: use quotes for array keys...
    ":rcamo" => $_POST["rcamo"], 
    ":userchar" => $_POST["userchar"],
    ":totamo" => $_POST["totamo"]
);

$db = new PDO($connection_info, $user, $pass); // from a config file
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // throw errors

$sql = "INSERT INTO `payment` (`ampaid`, `rcamo`, `userchar`, `totamo`) " .
       "VALUES (:ampaid, :rcamo, :userchar, :totamo)";

$prepare = $db->prepare($sql); // prepare query
$prepare->execute($params); // execute query using bound parameters

エラー処理は宿題としてお任せします。(ヒント: try-catch)

SELECTクエリの結果を使用INSERTして、同じ呼び出しでクエリを設定することはできません (間違っている場合は修正してください。それでも、それはひどい考えです)。


最後に

サニタイズされていない、または準備されていないユーザー入力を挿入しないでください。これが本当の銀行のアプリケーションである場合 (私は疑いがあります... うまくいけば)、これで自分のお金を信頼するのは非常に怖いでしょう. 実際、私は避けられない訴訟を通じてお金を稼ぎたいので、注意して、受け取ったユーザー入力を完全にサニタイズしてください.

于 2013-03-30T13:27:27.007 に答える
-2

上記の議論から得たのは、@ user2226832がテーブルに複数の値を挿入したいということです。したがって、次のようにすることができます-

INSERT INTO payment 
    (ampaid, rcamo, userchar, totamo) VALUES 
    ('@ampaid', '@rcamo', '@userchar', '@totamo'),
    ('$_POST[ampaid]','$_POST[rcamo]','$_POST[userchar]','$_POST[totamo]');

注: コードはテストされていませんが、単一引用符に注意してください。構文は正しいです。

于 2013-03-30T10:39:26.500 に答える