-2

我有一个包含两个表的数据库:userspayments

users表填充有

name
address
age
plan

payment表填充有

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

用户表包含大约 1000 行;他们是固定的,他们定期支付一定数额的储蓄。

我需要将用户表中的用户数据获取到带有表单的网页中,同时将他们的付款信息插入其中,并将整个数据发布到我使用下面代码的付款表中,但我无法发布用户表用这种形式的数据。

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包含值。使用PDOMySQLi参数化或准备它们。(此外,该语法对于包含在字符串中是无效的,因此您正在尝试将文字字符串添加到字段中)'$_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 回答