获取当前插入ID的ID

3
当您访问我的网站时,会看到一个首页和一个名为“开始调查”的按钮。点击该按钮后,您将看到调查问卷。
与此同时,当您点击该按钮时,会在数据库中插入一个ID。
Index.php:
        <form method="POST">
            <input type="hidden" name="x">
            <input type="submit" value="Go to enquete">
        </form>
<?php
    if(isset($_POST['x'])){
        $test = $database->insert_user_id();
        //header('Location: enquete/page1.php');
    }

而这个函数:

function insert_user_id(){
        $sql = "INSERT INTO user (user_id) VALUES (DEFAULT)";
        $sth = $this->pdo->prepare($sql);
        $sth->execute();
        return $this->pdo->('user_id');
}

return $this->pdo->lastInsertId('user_id');是我正在测试的内容!

现在我的问题是,我如何返回用户表中最后插入的id,以便在下一页显示它(请参见//header)。

我不能使用其他查询,比如SELECT MAX IDGetLastInsertId,因为当有人开始填写调查时,他将突然拥有另一个id。

我该如何让这个人保持正确的id?

5个回答

1
尝试一下。手动 PDO::lastInsertId
$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();

我不能使用其他查询来完成这个任务,比如SELECT MAX ID或LastInsertId。因为当其他人开始调查时,他们会突然拥有另一个ID。 - Mitch
如果新的ID正在被插入,问题是什么? - Noman
用户ID不存在。但是当您单击“开始调查”时,查询将向数据库插入一个ID。例如1。我希望这个ID在整个调查期间始终与我一起。但是如果您完成了一半的调查,另外有人也开始了调查。那么新的ID也会添加,编号为2。如果我使用SELECT MAX或LastInsert,则会获得ID号码2,而我本来应该有ID号码1。 - Mitch
你可以在插入 user_id 后立即获取 lastInsertId。这样应该没问题。它将返回当前连接中插入的最后一个 id。只要你不在请求之间保留连接,就应该没问题。 - tlenss
你应该在最后一个等式完成之前锁定表格,如果你锁定了表格,它将不允许你在此表格中插入新记录,因此你的等式将不会被干扰。 - Noman

1

我不能使用其他查询来完成这个任务,比如SELECT MAX ID或LastInsertId。因为当其他人开始调查时,他们会突然拥有另一个ID。 - Mitch
@Mitch,那么你可以获取被插入的其他人的ID吗?也许你可以开始一个事务? - user4035
当我开始调查时。我想在整个调查时间保持相同的ID。但是,如果你在一半的情况下,其他人也在进行调查。那么你的ID会在一半的时候改变。所以,我需要在整个时间内保留我插入的ID。 - Mitch
@Mitch 我认为,在插入记录并获取最后插入 ID 的过程中,锁定表以进行写操作是唯一的选择。 - user4035

0

你可以通过Get方法轻松实现这一点。

但是你也可以通过稍微调整你的代码来实现。

<form method="POST">
        <input type="hidden" name="x">
        <input type="submit" value="Go to enquete">
    </form>
<?php
if(isset($_POST['x'])){
    $id = $_POST['X'];
    $test = $database->insert_user_id($id);
    //header('Location: enquete/page1.php');
}

并将您的函数更改为

function insert_user_id($id){
    $sql = "INSERT INTO user (user_id) VALUES ('".$id. "')";
    $sth = $this->pdo->prepare($sql);
    $sth->execute();
    return $this->pdo->('user_id');
}

编辑:我失败了。

看看这个链接 http://php.net/manual/zh/function.mysql-insert-id.php


0

如果我理解正确,您想要刚刚插入到数据库中的行的ID,并将用户重定向到该行?

Index.php

if(isset($_POST['x'])){
    $enqueteId = $database->insert_user_id();
    header('Location: enquete/page1.php?id=' . $enqueteId);
}

功能:

function insert_user_id(){
        $sql = "INSERT INTO user (user_id) VALUES (DEFAULT)";
        $sth = $this->pdo->prepare($sql);
        $sth->execute();
        return $this->pdo->lastInsertId();
}

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接