0
$db->query("INSERT into `users` (username, password, email)
    VALUES ('$username', '$hashpassword', '$email')");

$userid = mysqli_insert_id($db->link);

$db->query("INSERT into `users logins` (userid, token, ip)
    VALUES ('$userid', '$token', '$ip')");

上記は古いコードです。以下は私の新しいものです:

$db->query("BEGIN TRANSACTION;
INSERT into `users` (username, password, email)
VALUES ('$username', '$hashpassword', '$email');

[here I need to get the row ID of the above insert]

INSERT into `users logins` (userid, token, ip)
VALUES ('$userid', '$token', '$ip')
COMMIT;");

最初の挿入行 ID を取得して 2 番目の挿入に使用するにはどうすればよいですか?

4

1 に答える 1

1

使用するLAST_INSERT_ID()

...

INSERT into `users logins` (userid, token, ip)
VALUES (LAST_INSERT_ID(), '$token', '$ip')

...

または作成するのはどうですかStored Procedure

DELIMITER $$
CREATE Procedure InsertRecord
(
    IN _userName VARCHAR(50),
    IN _passWord VARCHAR(50),
    IN _email VARCHAR(50),  
    IN _token VARCHAR(50),
    IN _ip VARCHAR(50)
)
BEGIN
    DECLARE Last_ID INT;

    INSERT into `users` (username, password, email)
    VALUES (_userName, _passWord, _email);

    SET Last_ID = LAST_INSERT_ID();

    INSERT into `users logins` (userid, token, ip)
    VALUES (LAST_INSERT_ID(), _token, _ip);

    SELECT Last_ID;
END $$
DELIMITER ;
于 2012-10-13T07:07:12.747 に答える