Php 如何插入新行并更新旧行值?
我想用我的PHP表单输入值在表中插入一个新行Php 如何插入新行并更新旧行值?,php,mysql,Php,Mysql,我想用我的PHP表单输入值在表中插入一个新行 $\u POST['bill\u amount'],$\u POST['paid\u amount']和$\u POST['due\u amount'] 以及使用值“0”更新最后第二行的到期金额列 之后,我想选择并回显最后一行(新插入的行)的值 我的PHP代码: <?php session_start(); ?> <?php error_reporting(E_ALL ^ E_DEPRECATED); ?> <body
$\u POST['bill\u amount']
,$\u POST['paid\u amount']
和$\u POST['due\u amount']
以及使用值“0”更新最后第二行的到期金额列
之后,我想选择并回显最后一行(新插入的行)的值
我的PHP代码:
<?php session_start(); ?>
<?php error_reporting(E_ALL ^ E_DEPRECATED); ?>
<body>
<?php
if(isset($_SESSION['username'])) {
?>
<?php
include 'dbconnection.php';
$ba = $_POST['bill_amount'];
$pa = $_POST['paid_amount'];
$da = $_POST['due_amount']
$sql = "INSERT into table(bill_amount,paid_amount,due_amount)
values ('$ba','$pa','$da')";
"UPDATE table SET due_amount='0' ORDER BY bill_id DESC LIMIT 1,1";
if (!mysql_query($sql)) {
die('Error:' . mysql_error());
}
echo "Here's the newly inserted record:";
$result = mysql_query("SELECT * FROM table ORDER BY bill_id DESC LIMIT 1");
echo "<table>
<tr>
<th>Bill ID</th>
<th>Bill Amount</th>
<th>Paid Amount</th>
<th>Due Amount</th>
</tr>";
while($row = mysql_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['bill_id'] . "</td>";
echo "<td>" . $row['bill_amount'] . "</td>";
echo "<td>" . $row['paid_amount'] . "</td>";
echo "<td>" . $row['due_amount'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
<HTML>
<?php
}
else {
echo "session expired";
}
?>
</body>
</html>
<?PHP
mysql_close($con);
?>
+------------+-------------+---------------+---------------+
| bill_id | bill_amount | paid_amount | due_amount |
+------------+-------------+---------------+---------------+
| 1 | 200 | 100 | 100 |
+------------+-------------+---------------+---------------+
| 2 | 300 | 100 | 200 |
+------------+-------------+---------------+---------------+
+------------+-------------+---------------+---------------+
| bill_id | bill_amount | paid_amount | due_amount |
+------------+-------------+---------------+---------------+
| 1 | 200 | 100 | 0 |
+------------+-------------+---------------+---------------+
| 2 | 300 | 100 | 200 |
+------------+-------------+---------------+---------------+
执行我的PHP代码后的表视图:
<?php session_start(); ?>
<?php error_reporting(E_ALL ^ E_DEPRECATED); ?>
<body>
<?php
if(isset($_SESSION['username'])) {
?>
<?php
include 'dbconnection.php';
$ba = $_POST['bill_amount'];
$pa = $_POST['paid_amount'];
$da = $_POST['due_amount']
$sql = "INSERT into table(bill_amount,paid_amount,due_amount)
values ('$ba','$pa','$da')";
"UPDATE table SET due_amount='0' ORDER BY bill_id DESC LIMIT 1,1";
if (!mysql_query($sql)) {
die('Error:' . mysql_error());
}
echo "Here's the newly inserted record:";
$result = mysql_query("SELECT * FROM table ORDER BY bill_id DESC LIMIT 1");
echo "<table>
<tr>
<th>Bill ID</th>
<th>Bill Amount</th>
<th>Paid Amount</th>
<th>Due Amount</th>
</tr>";
while($row = mysql_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['bill_id'] . "</td>";
echo "<td>" . $row['bill_amount'] . "</td>";
echo "<td>" . $row['paid_amount'] . "</td>";
echo "<td>" . $row['due_amount'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
<HTML>
<?php
}
else {
echo "session expired";
}
?>
</body>
</html>
<?PHP
mysql_close($con);
?>
+------------+-------------+---------------+---------------+
| bill_id | bill_amount | paid_amount | due_amount |
+------------+-------------+---------------+---------------+
| 1 | 200 | 100 | 100 |
+------------+-------------+---------------+---------------+
| 2 | 300 | 100 | 200 |
+------------+-------------+---------------+---------------+
+------------+-------------+---------------+---------------+
| bill_id | bill_amount | paid_amount | due_amount |
+------------+-------------+---------------+---------------+
| 1 | 200 | 100 | 0 |
+------------+-------------+---------------+---------------+
| 2 | 300 | 100 | 200 |
+------------+-------------+---------------+---------------+
执行PHP代码后,我想要的表视图:
<?php session_start(); ?>
<?php error_reporting(E_ALL ^ E_DEPRECATED); ?>
<body>
<?php
if(isset($_SESSION['username'])) {
?>
<?php
include 'dbconnection.php';
$ba = $_POST['bill_amount'];
$pa = $_POST['paid_amount'];
$da = $_POST['due_amount']
$sql = "INSERT into table(bill_amount,paid_amount,due_amount)
values ('$ba','$pa','$da')";
"UPDATE table SET due_amount='0' ORDER BY bill_id DESC LIMIT 1,1";
if (!mysql_query($sql)) {
die('Error:' . mysql_error());
}
echo "Here's the newly inserted record:";
$result = mysql_query("SELECT * FROM table ORDER BY bill_id DESC LIMIT 1");
echo "<table>
<tr>
<th>Bill ID</th>
<th>Bill Amount</th>
<th>Paid Amount</th>
<th>Due Amount</th>
</tr>";
while($row = mysql_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['bill_id'] . "</td>";
echo "<td>" . $row['bill_amount'] . "</td>";
echo "<td>" . $row['paid_amount'] . "</td>";
echo "<td>" . $row['due_amount'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
<HTML>
<?php
}
else {
echo "session expired";
}
?>
</body>
</html>
<?PHP
mysql_close($con);
?>
+------------+-------------+---------------+---------------+
| bill_id | bill_amount | paid_amount | due_amount |
+------------+-------------+---------------+---------------+
| 1 | 200 | 100 | 100 |
+------------+-------------+---------------+---------------+
| 2 | 300 | 100 | 200 |
+------------+-------------+---------------+---------------+
+------------+-------------+---------------+---------------+
| bill_id | bill_amount | paid_amount | due_amount |
+------------+-------------+---------------+---------------+
| 1 | 200 | 100 | 0 |
+------------+-------------+---------------+---------------+
| 2 | 300 | 100 | 200 |
+------------+-------------+---------------+---------------+
您需要在插入之前获取记录的ID 另一个解决方案是使用last_insert_id()排除新生成的行,并从更新中忽略此id 有些人喜欢这样:
$sql = "INSERT into table(bill_amount,paid_amount,due_amount) values ('$ba','$pa','$da');
UPDATE table SET due_amount='0' WHERE bill_id != LAST_INSERT_ID() ORDER BY bill_id DESC LIMIT 1,1;";
注意:
- SQL注入
- 您的代码可能会出现相关问题
<?php
// ....
$sql = "INSERT into table(bill_amount,paid_amount,due_amount)
values ('$ba','$pa','$da')";
$sql_update = "UPDATE table SET due_amount='0' ORDER BY bill_id DESC LIMIT 1,1";
if(!mysql_query($sql))
{
die('Error:' . mysql_error());
}
if(!mysql_query($sql_update))
{
die('Error:' . mysql_error());
}
/....
?>
根据您的mysql服务器,您需要使用分隔两个查询(插入和更新)
(在sql字符串内部)甚至对其进行两次单独的查询。问题的一部分是,update语句从未将其放入sql字符串(因为;
在字符串外部),如果他在此之前只得到1个条目(在插入之后得到2个条目),则该语句将不起作用。