使用预处理语句,如何返回插入行的ID?

62

我想要在数据库中检索插入的行的id,但是我不知道如何做。

我尝试使用SQL语句RETURNING id,但没有成功。

我该如何在插入一行后返回ID?


https://www.php.net/manual/en/mysqli-stmt.insert-id.php - Jose Manuel Abarca Rodríguez
3个回答

126

在 Prepared Statement 上调用 execute() 方法之后,插入行的 id 将在 insert_id 属性中。

$pstm->execute();
$pstm->insert_id;

3
在每次执行时,它会返回相应且唯一的ID吗?在文档下面的顶级评论中提到,如果您多次执行相同的预处理语句,则应该使用mysqli_connection->insert_id而不是mysqli_stmt->insert_id。请问您是否知道这是否正确? - Cheslab
1
只有在我将主索引列设置为“AUTO_INCREMENT”后,这才对我起作用。 - ban-geoengineering
1
$pstm->insert_id 不包含id! - Sebi2020
https://www.php.net/manual/en/mysqli-stmt.insert-id.php - Jose Manuel Abarca Rodríguez

9
$newid = mysqli_insert_id($mysqli_db);

$mysqli_db是你的mysqli数据库连接。据我所知,无论你是使用预处理语句还是直接使用INSERT INTO插入行,都不会影响到它。使用这个数据库连接,mysqli_insert_id()应该返回最后插入的行的id。

另一种方法是像这样进行另一个查询:SELECT LAST_INSERT_ID();


1
值得一提的是,这种方法在事务中也适用(并不那么明显)。 - Itako
иҝҷдёӘеҸҜд»Ҙз”ЁдәҺ PreparedStatement еҗ—пјҹжҲ‘йҖҡиҝҮ $pstm->execute(); иҺ·еҸ–дәҶ idпјҢ然еҗҺ insert_id еұһжҖ§дёӯжңүиҝҷдёӘ idпјҡ$mysqli->insert_id; - Renato Dinhani

6

您需要使用:

$stmt = $db->prepare("SQL Query");
$stmt->execute();
$id = $db->lastInsertId();

7
只有在使用 PDO 而不是 MySQLi 时才适用。 - Stack Overflow

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