Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 执行mysqli insert查询,然后立即选择新行的ID_Php_Mysql_Sql_Mysqli - Fatal编程技术网

Php 执行mysqli insert查询,然后立即选择新行的ID

Php 执行mysqli insert查询,然后立即选择新行的ID,php,mysql,sql,mysqli,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

我花了几个小时试图编写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\u insert\u查询执行时不会出现问题。但是,
echo$phone\u select\u query
看起来根本没有运行,因为
echo$phone\u id无效。这里可能发生了什么?我可以直接在MySQLWorkbench中运行查询

请注意,我以前曾尝试在一个查询中使用
SELECT LAST_INSERT_ID(),但mysqli无法执行任何包含该代码的查询。

请尝试此操作

 $lastInsertID= mysqli_insert_id($conn);

使用插入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;
?>

如果希望能够使用可用的函数获取最后插入的id,如
mysqli\u insert\u id()
,则表必须具有自动增量列。否则,您将无法获取id


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

首先,检查您插入的值是否实际出现在数据库中,以及它是否正确分配了id。注意:请记住最后一个结束括号\括号-它丢失了。意外的效果很有趣,但很耗时。这很有效,多么容易修复!非常感谢。(如果我在接下来的10分钟内不接受你的回答,提醒我)我感觉“比赛状态”即将来临。。。您如何确定最后一次插入的id是正确的?如果有人在最后一次执行前跳了起来怎么办?我肯定会的,只是StackExchange不允许你在头10分钟内接受答案。@Peter_James可能对比赛感兴趣conditions@Benjy1996我将以与PHP相同的线性方式吃我的“种族条件”。一次一根线…你一定要把它切成两半。