2013-10-01 2 views
0

삽입 된 여러 행의 마지막으로 삽입 된 ID를 가져 오려고합니다.연결 된 값에 마지막으로 삽입 된 ID를 선택하는 방법

INSERT INTO records (record_id, user_id, notes, x) values ('', '1237615', 'this is a note', 'active') 

INSERT INTO status_logs (log_id, record_id, status_id, date, timestamp, notes, user_id, x) VALUES('', INSERT INTO records (record_id, user_id, notes, x) values ('', '1237615', 'this is a note', 'active') 

INSERT INTO status_logs (log_id, record_id, status_id, date, timestamp, notes, user_id, x) VALUES('', mysql_insert_id(), '1', '2013:05:16 00:00:01', '', this is a note'', '1237615', 'active'), '1', '2013:05:16 00:00:01', '', this is a note'', '1237615', 'active') 

mysql_insert_id()에 대한 값이 없습니다 :

RECORD_ID 이것은 결과입니다 자동 증가

$sql = "INSERT INTO records (record_id, user_id, status, x) values "; 
     $varray = array(); 

     $rid = $row['record_id']; 
     $uid = $row['user_name']; 
     $status = $row['status']; 
     $x = $row['x']; 

     $varray[] = "('$rid', '$uid', '$status', '$x')"; 

     $sql .= implode(',', $varray); 

     mysql_query($sql); 

     $sql2 = "INSERT INTO status_logs (id, record_id, status_id, date, timestamp, notes, user_id, x) VALUES"; 

     $varray2[] = "(' ', mysql_insert_id(), '$status', '$uid', '$x')"; 

     $sql2 .= implode(',', $varray2); 

     mysql_query($sql2); 

입니다.

+0

sql 쿼리에 데이터를 삽입하는 더 안전한 방법 인 PDO에 대해 조금이라도 읽어 볼 수 있습니다. – Duniyadnd

+0

당신은 항상'MAX (id)'를 선택한 직후에 쿼리를 수행 할 수 있습니다. 그러나 이것은 동시에 어리석은 증거가 아닐 수도 있습니다. 그러나 적어도 시작일 수도 있고 별도의 쿼리를 실행하는 오버 헤드를 택할 수도 있습니다. –

답변

0

당신은 PHP 함수 mysql_insert_id() 및 SQL INSERT 문 구문을 혼합하고 있습니다. INSERT

INSERT INTO records (user_id, notes, x) VALUES('1237615', 'this is a note', 'active'); 
INSERT INTO status_logs (record_id, status_id, date, timestamp, notes, user_id, x) 
VALUES(LAST_INSERT_ID(), '1', ...); 
     ^^^^^^^^^^^^^^^^^ 

또는VALUES 절에

어느 사용 MySQL의 기능 LAST_INSERT_ID() 오른쪽 첫번째 mysql_query()mysql_insert_id()에 대한 별도의 호출하여 마지막으로 삽입 된 ID를 검색 할 수 있습니다. 그런 다음 두 번째 쿼리의 매개 변수로 사용할 때 그 값을 사용하십시오.

$sql = "INSERT INTO records (user_id, ...) 
     VALUES(...)"; 
$result = mysql_query($sql); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); //TODO beter error handling 
} 
$last_id = mysql_insert_id(); 
//   ^^^^^^^^^^^^^^^^^^ 

$sql2 = "INSERT INTO status_logs (record_id, ...) 
     VALUES $last_id, ...)"; 
$result = mysql_query($sql); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); //TODO beter error handling 
} 

참고 :

  • 당신은 열 목록에 auto_incremented 열을 지정할 필요가 없습니다. 그냥 생략하십시오. 보조 노트에 코드

에서 오류 처리의

  • 사용 적어도 어떤 종류의 대신의 쿼리 문자열을 보간 넓은 SQL-주사를 열어두고는 mysqli_* 또는 PDO 중 하나와 prepared statements를 사용하는 것을 고려 .

  • +0

    감사! 그것은 내 문제를 해결했다. – woninana

    0

    코드를 잘못 읽지 않는 한 SQL 내에서 mysql_insert_id이라는 PHP 함수를 호출하고 있습니까?

    당신이해야 할 일은 먼저 PHP 변수에 넣은 다음 SQL에서 변수를 사용하는 것입니다. 이런 식으로 뭔가 :

    // Run the first query 
    mysql_query($sql); 
    
    // Grab the newly created record_id 
    $recordid= mysql_insert_id(); 
    

    그런 다음 두 번째 INSERT들에 단지 사용

    $varray2[] = "(' ', $recordid, '$status', '$uid', '$x')"; 
    
    관련 문제