Php MySQL在插入语句后获取主键

Php MySQL在插入语句后获取主键,php,mysql,database,pdo,mysqli,Php,Mysql,Database,Pdo,Mysqli,我需要使用下面的insert语句,主键字段是自动递增的。我需要在插入后返回新的主键值。最好使用一条语句插入并返回主键值 $query = $database->connection->prepare("INSERT INTO accounts (created, priviledge, password, token, idle) VALUE ('$created', '1', :password, '$token_encrypt', '$idle')"); $query-&

我需要使用下面的insert语句,主键字段是自动递增的。我需要在插入后返回新的主键值。最好使用一条语句插入并返回主键值

$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();
使用
mysql\u insert\u id()
以获取上次查询中生成的ID


它检索由上一个查询(通常是INSERT)为自动增量列生成的ID。

假设您的主字段名是ID,然后尝试此代码

SELECT max(id) FROM tableName
或者试试这个

LAST_INSERT_ID();

一旦使用PDO,就需要使用

$database->connection->lastInsertId()

它保证您从当前会话返回值。因此,从评论中回答您的问题-您不可能从并发会话中得到错误的值。

$database->connection->lastinertid()
假设您使用PDOWorks很棒,这是否只会返回现有$query的值?换句话说,如果脚本的另一个实例正在运行,它是否有可能从另一个实例返回不正确的值?否。lastinsertid仅适用于您的脚本,并且仅适用于特定的DB连接。其他并行运行此代码或其他代码的用户不会影响您的ID,但可能会使用其他ID,因此此脚本的ID序列可能不连续。
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;
$$