0

3 つのフィールド (user_id、username、password) を持つ invisible という名前のテーブルと、フィールド (user_id、first_name、last_name) を持つ user_info という名前の別のテーブルがあります。user_info の user_id には、invisible の user_id に対する外部キー制約があり、この ID は自動インクリメントを使用して MySQL によって自動生成されます。これら2つのテーブルにユーザーに関するデータを挿入したいと思います。今のところ、INSERTを使用してランダムな一意のユーザー名を挿入することを念頭に置いていました

$username=bin2hex(openssl_random_pseudo_bytes(10));
$password=bin2hex(openssl_random_pseudo_bytes(10));
$query="INSERT INTO invisible SET username='$username', password='$password'";
mysqli_query($query);

そして、

mysqli_query("INSERT INTO user_info SET user_id=(SELECT user_id FROM invisible WHERE username=$username AND password=$password) , first_name=$first_name, last_name=$lastname");

ただし、ユーザー名とパスワードは一意である必要はないため、これは悪い方法だと思います。

だから私の質問は、ユーザー名とパスワードを処理することなく、最後の挿入から user_id を選択する方法はありますか?

4

2 に答える 2

0

LAST_INSERT_ID()を使用するだけで、セッションで最後に自動生成されたキーが含まれます(つまり、以前の挿入から)

INSERT INTO invisible SET username='$username', password='$password';
INSERT INTO user_info SET user_id=LAST_INSERT_ID();

単純な SQLfiddle

于 2013-08-19T20:21:31.840 に答える
0

使用mysqli::$insert_id:

$username=bin2hex(openssl_random_pseudo_bytes(10));
$password=bin2hex(openssl_random_pseudo_bytes(10));
$query="INSERT INTO invisible SET username='$username', password='$password'";
mysqli_query($query);

$inserted_user_id = mysqli::$insert_id;

mysqli_query("INSERT INTO user_info SET user_id=$inserted_user_id, first_name=$first_name, last_name=$lastname");
于 2013-08-19T20:23:36.783 に答える