lastInsertId 从不同的函数中获取

Posted

技术标签:

【中文标题】lastInsertId 从不同的函数中获取【英文标题】:lastInsertId get from different function 【发布时间】:2015-06-13 01:31:19 【问题描述】:

我有一个表格,将信息发送到数据库(填写后)

表格功能:

function train_add() 
            $sql = "INSERT INTO train_information "
        . "(train_id, image, train_name, tare_weight, number_of_bogies, number_of_axles, wheel_diameter_min, wheel_diameter_max)"
        . "VALUES (train_id, :image, :train_name, :tare_weight, :number_of_bogies, :number_of_axles, :wheel_diameter_min, :wheel_diameter_max) ";
            $sth = $this->pdo->prepare($sql);
            $sth->bindParam(':image', $_POST['image'], PDO::PARAM_STR);
            $sth->bindParam(':train_name', $_POST['train_name'], PDO::PARAM_STR);
            $sth->bindParam(':tare_weight', $_POST['tare_weight'], PDO::PARAM_STR);
            $sth->bindParam(':number_of_bogies', $_POST['number_of_bogies'], PDO::PARAM_STR);
            $sth->bindParam(':number_of_axles', $_POST['number_of_axles'], PDO::PARAM_STR);
            $sth->bindParam(':wheel_diameter_min', $_POST['wheel_diameter_min'], PDO::PARAM_STR);
            $sth->bindParam(':wheel_diameter_max', $_POST['wheel_diameter_max'], PDO::PARAM_STR);
            $sth->execute();
            return $this->pdo->lastInsertId('train_id');
    

没错。所以当表格被填写后,它被发送到数据库(作品)。

用户将在 10 秒后被重定向(我自己这样做是为了看看是否出现任何错误)。

<?php
        //Train information is send to the database, and selects the ID of the just added train//
        $add_train = $database->train_add();
    ?>

    <meta http-equiv="Refresh" content="10;url=http://localhost:8080/show_axle_table.php?train_id="<?php ['$id'] ?> >

show_axle_table.php:

<?php
    $show_axle = $database->axles();
?>
    <div id="train_select_table">
        <table>
            <tr>
                <th>Train id</th>
                <th>Number of bogies</th>
                <th>Number of axles</th>
            </tr>
        <div id="loopRow">
            <?php      
                foreach($show_axle as $res)
                //Loop trough results, generate a tablerow every time
            ?>
            <tr>        
                <?php
                echo "<td>" . $res['train_id'] . "</td>";
                echo "<td>" . $res['number_of_bogies'] . "</td>";
                echo "<td>" . $res['number_of_axles'] . "</td>";
                ?>
            </tr>
        <?php
            
        ?>
        </div>
        </table>
        </div>

以及功能:

function axles()
        $id2 = $this->train_add($id);
        $sql = "SELECT * FROM train_information WHERE train_id = '$id2'";
        $sth = $this->pdo->prepare($sql);
        $sth->bindParam(":id2", $_GET["train_id"], PDO::PARAM_STR);
        $sth->execute();
        return $sth->fetchAll();
    

现在表格显示了火车的 ID。但它加了 1,所以其他一切都是空的。 例如: 用户填写表格。将它发送到数据库(train_add)它得到 1 的 id 并完成。

然后页面重定向到 show_axle_table.php。函数应该获取最后插入的 id。但它显示我的 ID 为 2。

我还希望 ID 显示在我的页面顶部,例如:

show_axle_table.php?train_id="<?php ['$id'] ?>

但现在它什么也没显示。 (train_id=)

【问题讨论】:

【参考方案1】:

更新如下:

<?php
        //Train information is send to the database, and selects the ID of the just added train//
        if (!(isset($_GET['train_id]) && $_GET['train_id'])) 
            $add_train = $database->train_add();
        
    ?>

    <meta http-equiv="Refresh" content="10;url=http://localhost:8080/show_axle_table.php?train_id="<?php echo $add_train; ?> >



<?php
    $show_axle = $database->axles($_GET['train_id']);
?>
    <div id="train_select_table">
        <table>
            <tr>
                <th>Train id</th>
                <th>Number of bogies</th>
                <th>Number of axles</th>
            </tr>
        <div id="loopRow">
            <?php      
                foreach($show_axle as $res)
                //Loop trough results, generate a tablerow every time
            ?>
            <tr>        
                <?php
                echo "<td>" . $res['train_id'] . "</td>";
                echo "<td>" . $res['number_of_bogies'] . "</td>";
                echo "<td>" . $res['number_of_axles'] . "</td>";
                ?>
            </tr>
        <?php
            
        ?>
        </div>
        </table>
        </div>

并作为

function axles($id)
        $sql = "SELECT * FROM train_information WHERE train_id = '$id'";
        $sth = $this->pdo->prepare($sql);
        $sth->bindParam(":id2", $_GET["train_id"], PDO::PARAM_STR);
        $sth->execute();
        return $sth->fetchAll();
    

【讨论】:

它的工作原理完全相同。我也忘了告诉它有一个错误:注意:未定义的变量:第 89 行 ..\db_login.php 中的 id 这是“功能轴” 编辑了答案。看看吧。 错误现在消失了,它显示了一个ID。但仍然是向 id 添加 +1。所以我填写了表格,如 a a a a。 ID 是 189。然后当它重定向并向我显示 ID 时。它显示 ID:190,其余为 NULL。所以它再次执行插入语句。但随后没有信息 当我刷新我看到表格的页面时。它不断将 ID 加 1。 现在检查。编辑了答案

以上是关于lastInsertId 从不同的函数中获取的主要内容,如果未能解决你的问题,请参考以下文章

PHP OOP - 从两个函数返回 lastInsertId

为什么PDO的Oracle驱动程序不实现lastInsertId()?

使用左填充 PHP MYSQL 获取 lastInsertId

PDO LastInsertId 不返回任何内容

无法让 PHP lastInsertId() 使用此设置

lastInsertId() 是不是获取该脚本或整体插入的最后一个 id?