2013-02-15 7 views
-1

0을 반환하는 lastInsertID에 문제가 있습니다. 다른 페이지에서 작업 중이므로 여기에 잘못된 것이 있습니다.PDO lastInsertID가 0을 반환합니다.

다음은 try/catch 블록에 있습니다.

$idCount = "42"; 
/** set the database **/ 
$db = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); 
/** set the error reporting attribute **/ 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
$stmt = $db->prepare("SELECT image1 FROM items WHERE `id` = :id");  
/** bind the parameters **/ 
$stmt->bindParam(':id', $idCount, PDO::PARAM_STR); 
$stmt->execute();     
$idCount = $db->lastInsertId(); 
echo $idCount; 
+0

유 항목에서 –

답변

2

함수 이름 ->lastInsertId()은 SELECT 문이 일반적으로 마지막 삽입 ID를 설정하지 않는다는 힌트를 제공해야합니다.

일반적으로 auto_increment 열이있는 테이블의 INSERT 문만 해당 동작을 나타냅니다.

예외는 LAST_INSERT_ID(expr) 사용하는 경우로,하지만이 있습니다

SELECT LAST_INSERT_ID(`id`) AS `id`, image1 FROM items WHERE `id` = :id 
+0

고마워, 그 위대한 작품! –

+0

매우 흥미로운 저도이 솔루션을 찾고있었습니다. – kabuto178

2

lastInsertId()은 실제로 삽입 작업을 수행하는 경우에만 마지막 삽입 ID를 반환합니다. select 만하고 있습니다.

+0

아 덕분에 최대 (ID)를 선택 할 년 그냥 ID의 최대 값을 얻으려면 어떤 방법이 삽입하지 않고 마지막으로 삽입 된 ID를 얻으려면? –

+1

이것은 정확하지 않습니다. 마지막 삽입 ID는 다른 방법으로 채울 수 있으며 모든 삽입이 마지막 삽입 ID 값을 설정하는 것은 아닙니다. –

+0

그건 거짓말이야. 'INSERT INTO ... ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID (id)'는 업데이트 할 것이 없더라도 키가 이미 존재할 경우를 대비하여 원래의 id를 반환합니다. – Pere

관련 문제