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

我想用我的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>

    <?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个条目),则该语句将不起作用。