2016-07-26 5 views
0

最後の挿入クエリの最後のIDは取得できませんでしたが、2番目のIDは最後のIDを取得できませんでした。どうすればこれを達成できますか?私はあなたが同じ秒内の2人の異なるユーザーによって作成される2つの製品の危険性がないことが評価された場合、あなたはこのようなクエリを使用することができ、結合テーブルに最後の2個の自動インクリメントIDを取得

$query="INSERT INTO $dbname.Product (Description, ***, **, **, **) VALUES ('$des','$**', '$**', '$**', '$**')"; 
     $result = mysqli_query($conn,$query); 
     $id = mysqli_insert_id($conn); 
     $query2 = "INSERT INTO $dbname.Classification (**, **, **) VALUES ('$**', '$**', '$***')";  

     $result2 = mysqli_query($conn,$query2); 
     $id2 = mysqli_insert_id($conn); 
     echo $id; 
     echo $id2; //print the same ID as $id2 
+0

何が間違っていると思いますか?同じテーブルに挿入していないので、IDが同じである可能性があります。また:SQLインジェクション... – rlanvin

+0

ありがとう。私は間違いを発見しました。分類表のIDをAUTO INCREMENTに変更するのを忘れました – Bobby

+0

**警告**:mysqliを使用している場合は、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli .quickstart.prepared-statements.php)と['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使ってクエリにユーザーデータを追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'や' $ _GET'データを直接クエリに入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。 – tadman

答えて

1

を移入するの両方が必要です。

INSERT INTO $dbname.myTable (id_product, id_classification) VALUES((SELECT id_product FROM $dbname.Product ORDER BY id_product DESC LIMIT 1), (SELECT id_classification FROM $dbname.Classification ORDER BY id_classification DESC LIMIT 1)); 

多くの人が同じで製品を作成することができますし、紛争の危険性が高い場合には、私は、ストアドプロシージャを使用のだと私はそれぞれの後に変数に最後に挿入のidの値を格納しのですクエリ。

DELIMITER // 

CREATE PROCEDURE createProduct(
[your paramters], 
dbName AS VARCHAR(50) 
) 
BEGIN 

    DECLARE idProduct INT(10) UNSIGNED; 
    DECLARE idClassification INT(10) UNSIGNED; 

    DECLARE EXIT HANDLER FROM SQLEXCEPTION BEGIN 
     ROLLBACK; 
     RESIGNAL; 
    END; 

    START TRANSACTION; 

    INSERT INTO dbname.Product (Description, ***, **, **, **) VALUES ('$des','$**', '$**', '$**', '$**'); 

    SET idProduct = LAST_INSERTED_ID(); 

    INSERT INTO dbname.Classification (**, **, **) VALUES ('$**', '$**', '$***'); 

    SET idClassification = LAST_INSERTED_ID(); 

    INSERT INTO $dbname.myTable (id_product, id_classification) VALUES (idProduct, idClassification); 

    COMMIT; 

END// 
関連する問題