2016-07-26 2 views
0

마지막 삽입 쿼리의 마지막 ID를 얻었지만 두 번째 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 injection bug] (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// 
관련 문제