2014-01-12 1 views
3

MySQL 데이터베이스에 새로운 객체를 삽입 할 때 (행으로) 마지막 INSERT 행을 다시 가져오고 싶습니다. (ID는 항상 충분하지 않습니다. 일부 INSERT에는 자동이없는 일반 함수에서 이것을 사용하고 싶습니다. - 증가 ID).PDO에서 INSERT 한 후 마지막으로 삽입 된 행을 가져 오는 중 (MySQL 포함)?

POSSIBLY 데이터베이스로 만든 ID, 타임 스탬프 또는 경우에 따라 삽입 전에 알 수있는 값으로 전체 개체를 다시 제공하려면이 코드가 필요합니다. 따라서 PDO :: lastInsertId로 문제가 해결되지 않습니다.

$query = "INSERT INTO table (".$colinsert.") VALUES (".$colbind.")"; 
$stmt = $this->db->prepare($query); 
$ex = $stmt->execute(); 
// ... if $ex was successful, how do I retrieve the last inserted row now? 

데이터베이스 독립적 인 솔루션 좋을 텐데, 그러나 MySQL의 특정 경우 또한 확인 :-)

편집입니다 : 몇 가지 오해를 방지하기 - 예를 user_contact_connection 테이블에 다음 행 (contact_id, user_id, additional_connection_info)이 있습니다. 기본 키는 (contact_id, user_id)입니다. PDO :: lastInsertId는 자동 증가 열이 없으므로이 경우 0을 반환합니다.

O.k. 이 경우에는 어떤 행을 삽입했는지 알고 있지만, ID를 명시 적으로 쿼리하지 않고 일반적으로 마지막으로 삽입 된 행을 얻는 방법을 찾기를 희망합니다. 이것은 가능한가?

+0

당신은 이미'$ colbind'를 가지고 있습니다. 그래서 무엇이 문제입니까? 마지막 삽입 ID를 '-> lastInsertId'로 가져 와서 데이터베이스에 쿼리하면 해당 행에 대한 전체 정보를 얻을 수 있습니다. – Mave

+0

기본 키를 가지고 있습니까? –

+0

때로는 하나의 열이있는 기본 키를 가지고 있습니다. 가끔은 여러 개의 열이있는 기본 키가 있습니다. 이미 말했듯이 제네릭 함수에 필요하고 ROW가 반환되기를 원합니다. – Blackbam

답변

0

db에서 지속 된 후에 오브젝트를 사용하고 db가 계산 한 값을 오브젝트에 넣길 원한다면 (예 : 삽입 명령문을 제공하지 않은 디폴트 값을 되 돌리십시오. MySQL NOW() 등으로 생성 된 타임 스탬프), 아마도 가장 좋은 것은 삽입 후 가져 오는 것이다. 그러나 Doctrine과 같은 일부 ORM 라이브러리를 사용하면 지속하기 전에 모든 값을 사용하여 개체를 구성 할 수 있지만 기본값, 타임 스탬프 등을 제공해야합니다 (자동 증가는 어쨌든 가져와야 함).

관련 문제