我有一个包含两个表的数据库:users
和payments
users
表填充了
name
address
age
plan
payment
表填充了
name, address
age, plan
paidamount, transactionid
paiddate, receivedby
updatedby, authorisedby
Users表包含大约1000行;他们是固定的,他们会定期支付一定的费用以节省开支。
我需要将users表中的用户数据导入带有表单的网页, 将付款信息插入其中,并将整个数据发布到我使用下面代码的付款表中,但我无法使用此表单发布用户表数据。
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
表中获取
答案 0 :(得分:1)
切勿在查询for this reason中包含$_POST
个值。使用PDO或MySQLi对其进行参数化或准备。 (此外,该语法对于包含在字符串中无效,因此您尝试将文字字符串'$_POST[var]'
添加到INT
字段)
你真正的问题是你没有使用MySQL,因为它应该被使用( RDBMS 。请参阅下一节:
<小时/>
查找foreign keys。它们将您的表链接在一起,因此您应该永远不会在每次更新时将表的内容插入另一个表。您应该在用户表中插入行的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
查询(如果我错了,请纠正我,但这仍然是一个糟糕的主意)。
<小时/>
从不插入未经过验证的或未准备的用户输入。如果这是一个真正的银行应用程序(我有点怀疑......希望),我会非常害怕相信我的钱。事实上,我宁愿通过不可避免的诉讼赚钱,所以要小心, 完全消除你收到的任何用户输入,期限 。
答案 1 :(得分:-2)
我从上面的讨论得到的是@ user2226832想要在表中插入多个值, 所以你可以这样做 -
INSERT INTO payment
(ampaid, rcamo, userchar, totamo) VALUES
('@ampaid', '@rcamo', '@userchar', '@totamo'),
('$_POST[ampaid]','$_POST[rcamo]','$_POST[userchar]','$_POST[totamo]');
注意:代码未经过测试,但语法正确只需处理您的单引号。