2012-01-05 31 views
0

MySQLデータベースを使用してPHP Webアプリケーションを開発しています。INSERT INTOと主キー、自動インクリメントフィールド、デフォルト値

挿入後に行が受け取った主キー(または他の自動インクリメントフィールド)を調べる最良の方法は何ですか?

結果として完全行を返すものは、明示的に設定しなかったフィールドに割り当てられたデフォルト値についても知りたかったので、かなり良いものでした。

すべてのご協力をいただきありがとうございます。

- だから、

を編集し、私は実際のデータベース機能を抽象化、社内フレームワークを使用していますので、私は接続固有の「mysql_last_insert_id」を使用することはできませんし、「LAST_INSERT_IDを選択します」クエリ、AFAIKは、特に私が使用しているフレームワークがすべてのクエリに対して新しい接続を開くことを考慮すると、他のデータベース接続の影響を受けます。

これはフレームワークの問題だと思いますが、私を助けることはできません。 INSERT INTOに "行を挿入して返す"モードがあった場合、それはいいでしょう。

+2

-1:ゼロ研究努力。これは、MySQLマニュアルの 'AUTO_INCREMENT'に関するページに詳しく書かれています。 –

答えて

4

MySQLはこの正確な質問に答えるための便利な方法を提供し

$pdo->exec('insert into ...'); 
$lastId = $pdo->lastInsertId(); 
+0

私たちが使用しているフレームワークを使用してそれを行う方法を知っていましたが、MySQLまたはPDOを直接使用していた場合、あなたの答えは正確で完全です。ありがとう。 –

+0

うれしいことに、私は助けることができました。 –

+0

hm、downvoteはどこから来たのですか? –

0

mysql_*機能を使用している場合は、単にmysql_insert_id()を使用してください。デフォルトの行の値が必要な場合は、キーを使用して値を選択する必要があります。PDOのためのMySQLドライバは、同じ与えmysql_insert_id

チェック:

mysql> SELECT LAST_INSERT_ID() 

mysql_*機能は、そのためのラッパーが付属しています:

2

お試しください

MySQLのCODE:

CREATE TABLE IF NOT EXISTS `mytable` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(50) NOT NULL, 
    `member` int(11) NOT NULL, 
    `update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`), 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

SHOW: AUTO_INCREMENT

MySQLのインサート:

INSERT INTO mytable (`id`,`name`,`update`,`created`) values (NULL,'TEST',NOW(),NOW()); 

OR

INSERT INTO mytable (`name`,`update`,`created`) values ('TEST',NOW(),NOW()); 

OR

INSERT INTO mytable (`name`,`created`) values ('TEST',NOW()); 

PHPのMySQLコード:PHPの使用mysql_real_escape_stringので

<?php 

$foo = 'test'; 

mysql_query("INSERT INTO mytable (`name`,`created`) values ('".mysql_real_escape_string($foo)."',NOW())"); 

// GET LAST ID 
$id = mysql_insert_id(); 

?> 

mysql_real_escape_string(string) 

は、このドキュメントを参照してくださいmysql_real_escape_string

さようなら!

+0

誰もがこのページに勝つが、あなたは私を最も助けてくれた! –

関連する問題