3 つのクエリを含む mysql トランザクションがあります
3 番目のクエリでは、前の 2 つのクエリから last_insert_id 値を取得しようとしています。
VALUES ('".$result1[last_id]."','".$result2[last_id]."')";
しかし、うまくいきません。助言がありますか?
3 つのクエリを含む mysql トランザクションがあります
3 番目のクエリでは、前の 2 つのクエリから last_insert_id 値を取得しようとしています。
VALUES ('".$result1[last_id]."','".$result2[last_id]."')";
しかし、うまくいきません。助言がありますか?
最初に最後の挿入 ID を取得してから、それをクエリに挿入する必要があります。mysql_
関数を使用していると仮定します。
mysql_query($query1);
$id1 = mysql_insert_id();
mysql_query($query2);
$id2 = mysql_insert_id();
$query3 = "INSERT INTO ... VALUES (".$id1.", ".$id2.");";
mysql_query($query3);
MySQL を使用して、
SELECT LAST_INSERT_ID()
指定されたトランザクションの最後の挿入 ID を取得します。他の DBMS でもこれを行うことができますが、明らかに MySQL を使用しています。
ご存じのように、php の MySQL API にもこのためのショートカットがあります。
//mysql_*
$id = mysql_insert_id();
//PDO
$pdo = PDO_OBJECT;
$pdo->query();
$id = $pdo->lastInsertId();
//mysqli
$my = MYSQLI_OBJECT;
$my->query();
$id = $my->insert_id;
注: @HopeIHelped の回答は誤解を招くものです。同じトランザクション内にいる限り、競合状態はありません。 LAST_INSERT_ID()
指定されたトランザクションの最後の ID を取得します (上記の API も同様です)。そのため、このファイルで大量のトランザクションを実行し、クエリを一度にインターロックしても、安全に使用できます。
MySQL データベースを使用していると仮定します。次のような ID を取得できます。
mysql_query($first_query);
$first_result_id = mysql_insert_id();
mysql_query($second_query);
$second_result_id = mysql_insert_id();
$third_query = "INSERT INTO table (column1, column2) VALUES (".$first_result_id .", ".$second_result_id .");";
mysql_query($third_query);
お役に立てれば