Да, это надежно.
lastInsertId()
, как следует из названия, удерживает id (первичный ключ) последней вставленной строки.
Так что в отношении Q1: ответ будет 2, поскольку это была последняя вставленная строка.
Когда речь идет о последовательных вставках, и вы хотите "сделать что-то", который вращается вокруг использования lastInsertId()
, тогда вам придется объявить lastInsertId()
EXACTLY после (это важно) строки выполненного запроса.Таким образом, вы обязательно сохраните id , который хотите использовать.
->an insert query is executed
->lastInsertId() is stored into a variable
->variable is used for something
->another insert query is executed
->another lastInsertId is stored into a variable
->variable is used for something.
etc...
та же логика применима к циклу.
У вас не обязательно естьхранить lastInsertId()
в переменной, но это имеет смысл, если вы работаете в PHP и хотите использовать его для нескольких целей.Если нет, то вы можете просто использовать его непосредственно в соответствующем запросе.Но помните, это должно быть точно после указанной вставки для id , который вы хотите использовать.
Пример сбойной логики:
<?php
//I want to get id 1
$statement1->insert('john'); // id = 1
$statement2->insert('mary'); // id = 2
$lastId=$statement1->lastInsertId();
?>
Это будет неудачная логика, потому что я собираюсь получить идентификатор 1, но так как я жду, чтобы получить мой lastInsertId()
после оператора 2, а не оператора 1, мой lastInsertId()
будет равен 2 вместо 1.
Рабочая логика:
<?php
//I want to get id 1
$statement1->insert('john'); // id = 1
$lastId=$statement1->lastInsertId();
//do something with $lastId? (value will be 1)
//get contact info from a theoretical contact info table
$sql="SELECT * FROM tbl_contacts WHERE userId='$lastId'";
$statement2->insert('mary'); // id = 2
$lastId=$statement2->lastInsertId();
//do something with $lastId? (value will be 2)
?>
Эта логика будет работать, потому что я получаю нужные мне значения (значения) id и использую их доони перезаписываются другим id .
Вы, конечно, можете сделать переменные, содержащие значение lastInsertId()
, уникальными, чтобы они не перезаписывались, и затем вы могли бы использовать ихв любое время.