执行mysqli插入查询然后立即选择新行的ID

时间:2015-12-13 19:13:24

标签: php mysql sql mysqli

我花了几个小时试图编写mysqli查询以在数据库中插入一个新行(带有主键ID),然后选择新行的ID。我目前的代码是:

<?php
    include('connectionData.php');

    $conn = mysqli_connect($server, $user, $pass, $dbname, $port)
    or die('Connection error');

    if(isset($_POST['submit'])) {
        $pnum = $_POST['pnum'];

        $phone_insert_text = "INSERT INTO `voterdatabase`.`phone` (`pnum`) VALUES (?)";
        $phone_insert_query = $conn->prepare($phone_insert_text);
        $phone_insert_query->bind_param('s', $pnum);
        $phone_insert_query->execute();

        $phone_select_text = "SELECT phone_id FROM voterdatabase.phone WHERE pnum=?";
        $phone_select_query = $conn->prepare($phone_select_text);
        $phone_select_query->bind_param('s', $pnum);
        $phone_select_query->execute();
        $phone_select_query->bind_result($phone_id);

        echo $phone_id;
?>

$phone_insert_query执行没有问题。但是$phone_select_query似乎根本没有运行,因为echo $phone_id;没有效果。这可能会发生什么?我可以直接在MySQLWorkbench中运行查询。

请注意,我之前尝试使用SELECT LAST_INSERT_ID();在一个查询中执行此操作,但mysqli无法执行包含该查询的任何查询。

3 个答案:

答案 0 :(得分:2)

请试试这个

 $lastInsertID= mysqli_insert_id($conn);

答案 1 :(得分:0)

使用insert_id属性:

<?php
    include('connectionData.php');

    $conn = mysqli_connect($server, $user, $pass, $dbname, $port)
    or die('Connection error');

    if(isset($_POST['submit'])) {
        $pnum = $_POST['pnum'];

        $phone_insert_text = "INSERT INTO `voterdatabase`.`phone` (`pnum`) VALUES (?)";
        $phone_insert_query = $conn->prepare($phone_insert_text);
        $phone_insert_query->bind_param('s', $pnum);
        $phone_insert_query->execute();
        $phone_id = $conn->insert_id;

        echo $phone_id;
?>

答案 2 :(得分:0)

如果您希望能够使用可用的函数来获取最后插入的ID,例如{{1}},那么您的表必须具有 AUTO_INCREMENT 列。如果没有,你将无法获得身份证。

此外,即使您拥有所需的列,也需要两次调用。为了解决这个问题,您可以做的就是创建一个存储过程来为您执行插入操作,并从过程中返回插入的id。