关于php:如何获取表的自动增量主键

how to get the auto-increment primary key of a table

我有一个小型的MySQL卖家数据库,其中有一个表,其中每个卖家都有一个自动递增的主键(并且没有其他任何唯一的键属性)。现在我想从PHP脚本中检索每个卖家的数据

1
2
3
4
5
// Nothing wrong with this code
    $stmt = $this->conn->prepare("SELECT * FROM seller WHERE id= ? LIMIT 1");
    $stmt->bind_param("i", $ud);
    $stmt->execute();
    $result = $stmt->get_result();

但是…要用这个查询检索数据,我需要有主键(即卖家的autoincrement id)。我如何知道插入的记录的主键是什么?


您可以从自己的数据中获取ID。例如,假设您有一个页面,其中列出了小部件记录。该页上的数据库查询可能类似于:

1
SELECT id,name FROM widgets

然后将输出显示在一个循环中。在这个输出中,您可能有一个链接,例如:

1
echo 'Edit";

输出如下:

1
Edit

单击该链接时,浏览器将使用查询字符串数据id=123转到edit.php。因此,在该页面上,您可以获取该查询字符串值:

1
$_GET['id']

该值将是要显示的特定记录的ID。将其用作查询中的参数:

1
SELECT * FROM widgets WHERE id=?

或者,在特定代码中,这是传递给函数的值:

1
getUserData($_GET['id'])

无论您如何设计它,关键是要从数据中获取ID。你不需要凭直觉知道它们是什么。


  • 当你试图从MySQLServer中基于auto_increment id属性检索卖家数据时。我假设最初您不知道表中的任何细节。

    这可以通过使用PHP来处理,首先检索表中的所有ID,以及一个部分标识的属性(如seller name),然后使用所选ID获取所需seller的所有详细信息。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    if(!$con) die();
    function fetchId(){
        $result = mysqli_query($con,"SELECT id, name FROM seller");
        if($result && mysqli_num_rows($result)>0){
            while($row = mysqli_fetch_assoc($result)){
                echo"ID:".$row["id"]." NAME:".$row["name"];
                retrieveData($row["id"]);
            }
        }
    }

    function retrieveData($id){
        $result = mysqli_query($con,"SELECT * FROM seller WHERE id=".mysqli_real_escape_string($con,$id));
        if($result && mysqli_num_rows($result)==1){
            $row = mysqli_fetch_assoc($result)
            print_r($row);
        }
    }
    mysqli_close($con);

  • 在需要检索数据时,对诸如主键之类的属性使用自动增量并不是一种错误的方法,但是在使用它可以单独访问所需行之前,必须预先获取包含该键的部分行。


  • 准备好的语句的insert_id属性保存了我。现在,在insert语句之后,我可以获取表的最后一个插入的主键-

    1
    2
    $stmt->execute();
    $sid = $stmt->insert_id;

    这相当于mysql中的LAST_INSERT_ID()函数。确保在插入表行后的同一个会话中使用此方法。否则,它返回一个空集。