使用 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