如果我有这段代码:
<?php
$q = $sql->prepare("INSERT INTO `table` (row) VALUES ('1')");
$q->execute();
$lastid = $sql->lastInsertId(); // is this a 2nd query?
?>
它会作为两个单独的SQL查询运行吗?
如果是这样,有没有办法在一个地方做到这一点?
答案 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。