2013-12-13 2 views
1

데이터를 데이터베이스에 삽입 한 후 ID를 반환하고 싶습니다.mysqli_insert_id를 사용하여 잘못된 ID 가져 오기

동시에 여러 사람이 양식을 제출할 가능성이 큽니다.

이 ID는 다른 데이터베이스 로그에 기록되어 사용자에게 표시되는 다음 양식으로 파일을 업로드하는 데 사용되므로 결과에 잘못된 ID가 표시되는 것을 원하지 않습니다.

동시에 여러 사람이 mysqli_insert_id가 잘못된 ID를 선택할 수있는 기회가 있습니까?

해당 사용자의 최신 날짜 입력에 대한 쿼리를 수행하고 거기에서 ID를 가져 오는 것이 더 좋습니까?

아니면 mysqli_insert_id를 사용하고 해당 ID가 올바른지 확인하기 위해 해당 레코드의 사용자 이름과 대조해야합니까?

아니면 문제가 아닌 것에 대해 걱정하고 있습니까?

모든 입력 주셔서 감사합니다.

김 :

+1

처럼에 mysql_insert_id 사용할 수 있습니다 (밀리 초)의 규모가 ... 그것은 많은 사용자/초 제출 방법에 따라 달라집니다 의미하지만, 나는 적어도 있음직를 호출 것 . 그러나 몇 가지 완전한 답변을 기다리고 우리 둘 다 배우게됩니다 (: –

+1

IIRC, 트랜잭션을 사용하면 문제가되지 않음) : http://dev.mysql.com/doc/refman/5.6/set-transaction.html – Zarathuztra

+0

Look : http://php.net/manual/en/mysqli.insert-id.php –

답변

5

last_insert_id() 타입 기능은 특정 DB 연결에 연결되어 있습니다. 다른 병렬 연결이 생성 한 ID를 얻지 못할 것이다. 3 개의 요청 전에이 스크립트로 한 연결 ID를 얻지 못할 것이다.

항상 특정 DB 연결을 수행 한 마지막 삽입의 ID가됩니다.

본질적으로 임의의 숫자를 반환하면 완전히 쓸모없는 함수가됩니다. 예 : 일련의 부모/자식 연결 테이블을 고려하십시오. 상위 레코드를 삽입하고 ID를 검색하고 다른 삽입의 ID를 얻으려고합니까? 이제 새로운 기록을 "잃어 버렸습니다". 그리고 그 어린이들을 부적절한 부모에게 붙이게 될 것입니다.

아니요. 이 기능은 예상대로 작동하며 잘못된 ID를 얻는 것에 대해 걱정할 필요가 없습니다. 유일한주의 사항은 LAST 삽입물 ID 만 검색한다는 것입니다. 연속해서 2 개 이상의 삽입을하면 마지막 삽입을 제외한 모든 ID를 잃어버린 것입니다.

-2

는 "동시에"이

<?php 
$con = mysql_connect("localhost", "peter", "abc123"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

$db_selected = mysql_select_db("test_db",$con); 

$sql = "INSERT INTO person VALUES ('B�rge','Refsnes','Sandnes','17')"; 
$result = mysql_query($sql,$con); 
echo "ID of last inserted record is: " . mysql_insert_id(); 

mysql_close($con); 
?> 
+0

mysql_ *은 권장되지 않습니다. 사용하지 마십시오 – Zarathuztra

+0

mysql 대신 mysql 프로 시저를 사용한다는 것을 알고 있습니다. 내 수업은 감가 상각 된 목록으로 인해 다시 작성해야하는 어려운 방법으로, 사용하고 있던 책을 버리고 온라인 PHP 사이트를 고수하려고했습니다. 언젠가는 실제로 절차 지향적이며 객체 지향적 인 것을 잊을 것입니다. 이 단계에서 모든 단계를 수행해 주셔서 감사합니다. –