使用 Prepared Statement,我如何返回插入行的 id?

Posted

技术标签:

【中文标题】使用 Prepared Statement,我如何返回插入行的 id?【英文标题】:Using Prepared Statement, how I return the id of the inserted row? 【发布时间】:2011-09-27 06:08:00 【问题描述】:

我想检索数据库中插入行的 id,但我不知道该怎么做。

我尝试使用 SQL 子句 RETURNING id 返回,但不起作用。

插入一行后如何返回id?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

但它会为每次执行返回一个对应且唯一的 ID 吗? documentation 下的顶部评论说,如果您多次执行相同的准备好的语句,则应该使用 mysqli_connection->insert_id 而不是 mysqli_stmt->insert_id。想你可能知道这是否正确。 这仅在我将主索引列设置为 AUTO_INCREMENT 后对我有用。 $pstm->insert_id 不包含id!【参考方案2】:
$newid = mysqli_insert_id($mysqli_db);

$mysqli_db 是你的 mysqli 数据库连接。据我所知,插入行的方式无关紧要(准备好的语句或直接INSERT INTO)。 mysqli_insert_id() 应该使用此数据库连接返回最后插入的行的 id。

另一种方法是进行另一个查询,例如SELECT LAST_INSERT_ID();

【讨论】:

值得一提的是,这种方法也适用于事务(不太明显)。 这适用于PreparedStatement?我得到了 id:$pstm->execute();,之后,insert_id 属性的 id 为:$mysqli->insert_id;【参考方案3】:

你需要使用:

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

【讨论】:

仅当您使用PDO 而不是MySQLi

以上是关于使用 Prepared Statement,我如何返回插入行的 id?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Prepared Statement 设置 LONG 数据类型

如何在SELECT FROM PDO Prepared Statement中为搜索框设置多个搜索条件?

当 Statement 与 Java 和 Oracle 一起使用时,Prepared Statement 不起作用

使用 PDO Prepared Statement 在 MySQL 中插入 BIT 值

Java 和 Access - 使用 Prepared Statement 并获取日期

MYSQLI Prepared statement update statement with where in array