「id」という列を持つmysqlテーブルがあります-この列には自動インクリメントが設定されています。
INSERT INTO クエリを実行せずに、PHP と PDO を使用して次の自動インクリメント値を取得する方法を知りたいだけです。(私はこれについていくつかの質問を見つけました - しかし、INSERT INTO なしで mysqli のみに基づいているものはありません)。
ありがとう!
「id」という列を持つmysqlテーブルがあります-この列には自動インクリメントが設定されています。
INSERT INTO クエリを実行せずに、PHP と PDO を使用して次の自動インクリメント値を取得する方法を知りたいだけです。(私はこれについていくつかの質問を見つけました - しかし、INSERT INTO なしで mysqli のみに基づいているものはありません)。
ありがとう!
なぜこれが必要なのですか?
必要に応じて、このように現在の自動インクリメント値を取得できますが、これが必要になる状況は見当たりません。
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND TABLE_NAME = 'TableName';
より詳しい情報:
あなたがこれを望む/必要とする理由がわかります。DBに追加のクエリを送信することなく「キー」を一意に保つ新しいクライアントのセキュリティの一部として使用します。
$q = $db->query("SHOW TABLE STATUS LIKE 'yourtable'");
$next = $q->fetch(PDO::FETCH_ASSOC);
echo $next['Auto_increment'];
次の ID を要求してからそれを使用するまでの間に、誰かが同時クエリによって新しいレコードが挿入され、取得した ID が無効になるため、注意してください。
名前を知らなかったときに新しい人のレコードを追加したい場合、newPersonを入れたいとしましょう
ID を取得して db newPerson に書き込みます
しかし、これは起こる可能性があります:
get1 id get2 id write1 to db newPerson write2 to db newPerson
ここで、1 と 2 はたまたま同時に実行される 2 つの並行スクリプトです。
簡単な修正は、これを回避するためにトランザクションを使用することです