在关系数据库中,如何从另一个表中获取最后一个插入ID

时间:2017-11-07 14:26:07

标签: php mysql

我有两个关系表,如何得到第一个表的最后一个表,并在另一个表中使用它。 我希望$welfare_id变量获取第一个表的last_insert_id(另一个表)。

以下是代码:

<?php
include_once('config.php');

if (isset($_POST['record'])) {
    $payeeName = $_POST['payeeName'];
    $amount = $_POST['amount'];
    $welfare_id = LAST_INSERT_ID();

    $myd = $pdo->prepare('INSERT INTO welfare_funeral_payees(Name, Amount, welfare_id)VALUES(:upayeeName, :uamount, :uwelfare_id)');
    $myd->bindParam(':upayeeName', $payeeName);
    $myd->bindParam(':uamount', $amount);
    $myd->bindParam(':uwelfare_id', $welfare_id);


    if ($myd->execute()) {
        ?>
        <script>
            alert("New Welfare created");
        </script>
        <?php
    } else {
        ?>
        <script>
            alert("Couln't not create Welfare");
        </script>
        <?php
    }
}
?>

1 个答案:

答案 0 :(得分:0)

你必须考虑LAST_INSERT_ID()在每个连接基础上工作,所以,如mysql手册中所述:

  

生成的ID在服务器上维护   每个连接基础。这意味着返回的值   给定客户端的函数是生成的第一个AUTO_INCREMENT值   对于影响AUTO_INCREMENT列的最新语句   客户。此值不受其他客户端的影响,即使它们也是如此   生成自己的AUTO_INCREMENT值。此行为可确保   每个客户端都可以检索自己的ID而无需担心   其他客户的活动,无需锁或   交易。

这意味着只有在插入后才能有意义地调用LAST_INSERT_ID(),并且该id仅与该特定客户端相关。

要解决您的问题,您必须采取以下方法:使用MAX(按照Nic3500的建议),这会产生一个问题,即您不确定自己真正使用的是哪个ID,或者在帖子中传递您需要的ID,在帖子之前的某种方式(例如,从已经创建的&#34;福利&#34;)的列表中