1

3 つのクエリを含む mysql トランザクションがあります

3 番目のクエリでは、前の 2 つのクエリから last_insert_id 値を取得しようとしています。

VALUES ('".$result1[last_id]."','".$result2[last_id]."')";

しかし、うまくいきません。助言がありますか?

4

3 に答える 3

3

最初に最後の挿入 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);
于 2012-07-18T17:37:29.627 に答える
1

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 も同様です)。そのため、このファイルで大量のトランザクションを実行し、クエリを一度にインターロックしても、安全に使用できます。

于 2012-07-18T17:42:42.073 に答える
1

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);

お役に立てれば

于 2012-07-18T17:40:33.310 に答える