2016-07-26 69 views
0

我設法得到最後一個插入查詢的最後一個ID,但也沒有爲第二個ID查詢。我怎樣才能做到這一點?我既需要填充連接表獲取最後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//