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

时间:2014-03-19 02:00:00

标签: php mysql sql pdo

如果我有这段代码:

<?php
    $q = $sql->prepare("INSERT INTO `table` (row) VALUES ('1')");
    $q->execute();

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

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

如果是这样,有没有办法在一个地方做到这一点?

2 个答案:

答案 0 :(得分:3)

    $lastid = $sql->lastInsertId();

它的工作方式类似于查询,因为它将从数据库中选择最后插入的id。

正如documentation所说

  

返回最后插入的行的ID,或序列对象的最后一个值,具体取决于底层驱动程序。

答案 1 :(得分:3)

不,实际上它并没有运行SQL查询。

这是来自ext / pdo_msyql / mysql_driver.c的行:

char *id = php_pdo_int64_to_str(mysql_insert_id(H->server) TSRMLS_CC);

这是对MySQL API mysql_insert_id()的调用。这在内部访问最后一个插入id作为属性,而不是通过运行SQL。