Php 执行mysqli insert查询,然后立即选择新行的ID
我花了几个小时试图编写mysqli查询,以便在数据库中插入新行(使用主键ID),然后选择新行的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
<?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相同的线性方式吃我的“种族条件”。一次一根线…你一定要把它切成两半。