lastInsertId()関数の記述方法と混同しています。たとえば、私はlastInsertId()関数で次のクエリを持っています。PHP PDO lastInsertId()関数の混乱
$myinsert = $pdo->prepare("INSERT INTO some_table(something)VALUE(:something");
$myinsert -> bindValue(':something', $something);
$myinsert -> execute();
$insert = $pdo->prepare("INSERT INTO table(something)VALUE(:something");
$insert-> bindValue(':something', $something);
$insert-> execute();
$lastId = $pdo->lastInsertId();
$stmt = $pdo->prepare("INSERT INTO another_table(something)VALUE(:something");
$stmt -> bindValue(':something', $something);
$stmt -> execute();
今の混乱は、誰もが知っているとsatement $lastId = $pdo->lastInsertId();
に何のどこが$myinsert
クエリまたは$insert
クエリからまたは$stmt
クエリから最後に挿入IDを取得するかどうかを言及していないがあることをここに見ることができるようにということです。では、IDをどこから取得するかはどのように分かっていますか? lastInsertId()
関数が$stmt
クエリの上に配置されているため、$stmt
クエリがまだ実行されていないと宣言されたときに、$stmt
クエリから最後に挿入されたIDをフェッチしません。しかし、それは$insert
クエリから取得し、$myinsert
クエリからではなく、全体の文$lastId = $pdo->lastInsertId();
からフェッチする必要があることを知っているので、何も定義されていないので、特定のクエリからフェッチしますか?それが動作する方法を理解するのを手伝ってください。
私はPDOに精通していません。たぶん、誰かがそれをより良く説明するかもしれない。しかし、これはPDOインスタンス内のインスタンス変数( '$ pdo')からの一種のゲッターとして見ることができます。データベースへの 'INSERT'呼び出しごとに、ステータス情報で応答します。それに基づいて、「挿入」が成功したか否かが判定される。 infoから得られたidは変数に格納され、次に成功する 'INSERT'呼び出しを上書きします。 – KarelG
これは、自動インクリメント値を生成する呼び出しを行う前に、最後の挿入物からの挿入IDを与えるだけです。各インサートは1つを生成することができますが、この呼び出しの前に最後に実行されるのは最後のインサートだけになります。 –
@NigelRenこれは私が明確にしたいことです....私はこれを私の経験から知っていましたが、私が思っていることは正しいことを明確にしたかったのです。これが答えだったら+1でした)thanks buddy ;) –