PDO:lastInsertId() 是单独的查询吗?

3
如果我有这段代码:
<?php
    $q = $sql->prepare("INSERT INTO `table` (row) VALUES ('1')");
    $q->execute();

    $lastid = $sql->lastInsertId(); // is this a 2nd query?
?>

它会作为两个单独的SQL查询运行吗?

如果是这样,有没有一种方法可以将其合并为一个查询?


你正在寻找 事务 吗? 它可以将两个分开的SQL调用合并成一个 原子 调用。 - mpyw
你为什么想要在一个查询中完成它? - Mike
因为我想在不查询两次数据库的情况下获取刚插入的行的ID。 - supercoolville
@supercoolville 你为什么认为我想要“在不查询的情况下……”? - mpyw
哈哈哈……所以当成功插入一行时,没有数据会自动返回? - supercoolville
@supercoolville 确实如此 xD - mpyw
2个回答

3
    $lastid = $sql->lastInsertId();

它的工作方式类似于查询,因为它会从数据库中选择最后插入的ID。根据文档所说,返回最后插入行的ID或序列对象的最后一个值,具体取决于底层驱动程序。请参考文档

3
不,实际上它不运行SQL查询。
以下是来自ext/pdo_mysql/mysql_driver.c的代码行:
char *id = php_pdo_int64_to_str(mysql_insert_id(H->server) TSRMLS_CC);

这是对MySQL API的调用,mysql_insert_id()。它通过属性访问最后插入的id,而不是运行SQL语句获取。

糟糕...感谢您详细的回答。 - mpyw

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