2

MySQL に主キーを持つテーブルがあり、そのテーブルに挿入し、挿入された最後の行の ID を再開したいのですが、使用する必要があることはわかっていますLAST_INSERT_ID が、そのステートメントを使用して値を別のテーブルに挿入した後の質問ですそれは主キーを持っていません。もう一度使用して、最初に挿入された正確な 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
            ));

すべてのテーブルを埋めるまで試すことができず、IDを知らずにすべてのテーブルを埋めることはできないため、試しませんでした:)

4

2 に答える 2

12

オブジェクト$this->dbが PDO オブジェクトを参照している場合は、これを使用できます

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

ID を保存するには、変数に保存することをお勧めします

したがって、挿入するたびに、挿入された行のIDを保存できます

正確に使用する必要があることを覚えておいてください$sth->execute()

于 2012-05-25T10:51:04.747 に答える
1

自動インクリメントとして主キーを持つテーブルにレコードを挿入するたびに、「LAST_INSERT_ID()」が最新の値で更新されます。永続的ではありませんが、テーブルにない場合でも、自動インクリメントの主キーを持つテーブルに使用された最後の値を保持する必要があります。

于 2012-05-25T10:53:08.440 に答える