Вопрос по pdo, database, mysql – MySQL PDO последний вставленный идентификатор

2

У меня есть таблица на MySQL с первичным ключом, я вставил в эту таблицу, и я хочу, чтобы возобновить вставлен идентификатор последней строки, я знаю, что должен использоватьLAST_INSERT_ID но мой вопрос заключается в том, что после использования этого оператора для вставки значений в другую таблицу, у которой нет первичного ключа, могу ли я использовать его снова, чтобы получить точный идентификатор первой вставленной таблицы?

$ php pdo #

include_once 'type_model.php';
        $t = new Type_Model();
        $typeID = $t->getTypeID($type);
        include_once 'informationObject_model.php';
        $i = new InformationObject_Model();
        $answerIoID = $i->getIOID($ioAnswer);
        $query = "INSERT INTO question (info, text, answer, answerIoID, firstChoice, secondChoice, thirdChoice, 
            firstHint, secondHint, typeID) VALUES (:info, :text, :answer, :answerIoID,
            :firstChoice, :secondChoice, :thirdChoice, :firstHint, :secondHint, :typeID)";
        $sth = $this->db->prepare($query);
        $sth->execute(array(
            ':info' => $info,
            ':text' => $text,
            ':answer' => $answer,
            ':answerIoID' => $answerIoID,
            ':firstChoice' => $choices[0],
            ':secondChoice' => $choices[1],
            ':thirdChoice' => $choices[2],
            ':firstHint' => $hints[0],
            ':secondHint' => $hints[1],
            ':typeID' => $typeID
        ));
        if ($about == "Place") {
            include_once 'place_model.php';
            $p = new Place_Model();
            $placeID = $p->getPlaceID($place);
            $query = "INSERT INTO `question-place` (questionID, placeID) VALUES
                (LAST_INSERT_ID() ,:placeID )";
            $sth = $this->db->prepare($query);
            $sth->execute(array(
                ':placeID' => $placeID
            ));
        }

и теперь, еслиabout==place я могу написать это?

$query = "INSERT INTO `question-io` (questionID, io) VALUES
                (LAST_INSERT_ID() ,:io )";
$sth = $this->db->prepare($query);
$sth->execute(array(
                ':io' => $io
            ));

Я не пробовал, потому что я не могу попробовать, пока я не заполню все свои таблицы и не смогу заполнить все свои таблицы, не зная идентификатора :)

Ваш Ответ

2   ответа
12

если ваш объект$this->db ссылка на объект PDO, так что вы можете использовать это

$ID=$this->db->lastInsertId();

чтобы сохранить свой идентификатор, лучше сохранить его в переменной

поэтому после каждой вставки вы можете сохранить идентификатор этой вставленной строки

и помните, что вы должны использовать его именно после$sth->execute()

да, это работает, спасибо LinCR
1

когда вы вставляете запись в таблицу, у которой первичный ключ имеет автоинкремент, "LAST_INSERT_ID ()" quot; будет обновлено с самым последним значением. Он не будет постоянным, но да, если в вашей таблице его нет, он все равно должен содержать последнее значение, использованное для таблицы с автоинкрементным первичным ключом.

спасибо за помощь, я уже добавил автоинкремент, и я получил ответ, спасибо LinCR

Похожие вопросы