2014-10-16 67 views
0

我需要使用下面的插入语句,主键字段是自动增量。我需要在插入后返回新的主键值。最好使用一个语句来执行插入并返回主键值。MySQL插入陈述后得到主键

$query = $database->connection->prepare("INSERT INTO accounts (created, priviledge, password, token, idle) VALUE ('$created', '1', :password, '$token_encrypt', '$idle')");  
$query->bindParam(":password", $password_hash);  
$query->execute(); 
+2

'$ database-> connection-> lastInsertId()'假设你使用PDO – zerkms 2014-10-16 19:50:55

+0

工程很好,这会返回现有$查询的值吗?换句话说,如果脚本的另一个实例正在运行,那么它是否有机会从另一个实例返回不正确的值? – 2014-10-16 19:55:04

+0

没有。 lastinsertid仅适用于** YOUR **脚本,并且**仅适用于该特定的数据库连接。其他用户并行运行此代码或其他代码不会影响您的ID,除了可能使用其他ID以便此脚本的ID序列可能不是顺序的。 – 2014-10-16 19:56:30

回答

2

为你使用PDO,你需要使用

$database->connection->lastInsertId() 

而且它保证你要返回当前会话的值。所以从评论中回答你的问题 - 你不可能从并发会话中获得错误的值。

0

使用mysql_insert_id();可以获取上次查询中生成的ID。

它通过上一个查询(通常是INSERT)检索为AUTO_INCREMENT列生成的ID。

0

假设你的主要字段名ID那就试试这个代码

SELECT max(id) FROM tableName 

或一旦尝试这种

LAST_INSERT_ID(); 
0
DELIMITER $$ 
DROP TRIGGER IF EXISTS `TR_AI_mytable`; 
CREATE TRIGGER `TR_AI_mytable` AFTER INSERT 
    ON `mytable` FOR EACH ROW 
BEGIN 
    SET @mylastPK = new.PKField; 
END; 
$$