は、基礎となるドライバに応じて、シーケンスオブジェクトから最後に挿入された行、または最後の値のIDを返し述べています。
PDO::LastInsertID()
に最初のパラメータとして渡された無$name
変数がない場合
は、それがデータベースに挿入された最後の行を確認します。この機能の状態は、記載されているドライバによって正しく動作するかどうかを判断することもできます。MySQL
を使用している場合は大丈夫ですが、OID
をサポートしていないデータベースを使用している場合は問題ありませんテーブル定義のAUTO_INCRAMENT
、PDO::LastInsertId()
が動作しない可能性があります。
これはすべてうまくいっていますが、これはどのように達成されましたか?
私は理解していますPDO
はデータベース接続のもう一つの抽象化層ですが、mysqli_insert_id
の機能についても話しています。
私の考えではキャッシュ(not on PHP's side
)がありました。このコードはマニュアルページのwarezthebeef at gmail dot com
からこのビットを読むと真実でした。
// Assume $dbh connection handle is already established
$sql = "INSERT INTO product (product_name) OUTPUT INSERTED.product_id VALUES (?)";
$sth = $dbh->prepare($sql);
$sth->execute(array('widgets'));
$temp = $sth->fetch(PDO::FETCH_ASSOC);
echo "<pre>",print_r($temp),"</pre>";
これが表示されます:
Array
(
[product_id] => E1DA1CB0-676A-4CD9-A22C-90C9D4E81914
)
をこれは、データベース内のテーブルには、行product_id
が含まれます原因であるとSQL
にあなたがされるであろう、挿入した後に行出力に述べていますより一般的な用語の場合はid
、AUTO_INCRAMENT
を使用する場合は単なる数字になります。我々だけで使用することができ、我々はPDO::LastInsertID()
メソッドを使用しなかった場合のように、
ので(これもRETURNING
SQLキーワードで達成可能である)(あなたはhereを見ることによって、それに詳細を読むことができます):
$sql = "INSERT INTO table (name, country) OUTPUT INSERTED.id VALUES (?,?)";
$sth = $dbh->prepare($sql);
$sth->execute(['jack', 'Australia']);
$temp = $sth->fetch(PDO::FETCH_ASSOC);
echo $temp['id']
データベースに挿入した新しいIDを出力する必要があります。AUTO_INCRAMENT
プライマリまたはOID列を使用していることに注意してください。
PDOはPHP's Temp
のデータをキャッシュしていて、メソッドが呼び出されたときにそのデータを取得または書き込みできます。RETURNING id
などを追加することもできますが、そうではありません。それはOID
列に基づいているので、それは動作する方法です。
は、私は質問の半分に答え - 私はこの方法が実際に最後のIDを格納したり、それを
感謝を引く方法を思ったんだけど!
私はmysqlの最後のinsert id関数を使用していると思います。 http://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id – bassxzero
これに対して、 '$ lastInsertId = $ステートメントで直接' id'を選択することができますdbh-> lastInsertId(); ' – cmorrissey