MySQL数据库就像银行帐户的日常交易

时间:2013-03-30 10:15:01

标签: php mysql

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

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表中获取

2 个答案:

答案 0 :(得分:1)

首先

切勿在查询for this reason中包含$_POST个值。使用PDOMySQLi对其进行参数化或准备。 (此外,该语法对于包含在字符串中无效,因此您尝试将文字字符串'$_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]');

注意:代码未经过测试,但语法正确只需处理您的单引号。