[php] PDO는 마지막으로 삽입 된 ID를 얻습니다

검색어가 있는데 마지막 ID를 삽입하고 싶습니다. 필드 ID는 기본 키 및 자동 증분입니다.

나는이 진술을 사용해야한다는 것을 안다 :

LAST_INSERT_ID()

이 문장은 다음과 같은 쿼리에서 작동합니다.

$query = "INSERT INTO `cell-place` (ID) VALUES (LAST_INSERT_ID())";

그러나이 진술을 사용하여 ID를 얻으려면 :

$ID = LAST_INSERT_ID();

이 오류가 발생합니다.

Fatal error: Call to undefined function LAST_INSERT_ID()

내가 뭘 잘못하고 있죠?



답변

PHP가 아닌 SQL 함수이기 때문입니다. 사용할 수 있습니다 PDO::lastInsertId().

처럼:

$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();

PDO API 대신 SQL로 수행하려면 일반 선택 쿼리처럼 수행하십시오.

$stmt = $db->query("SELECT LAST_INSERT_ID()");
$lastId = $stmt->fetchColumn();


답변

lastInsertId ()는 INSERT 쿼리 이후에만 작동합니다.

옳은:

$stmt = $this->conn->prepare("INSERT INTO users(userName,userEmail,userPass) 
                              VALUES(?,?,?);");
$sonuc = $stmt->execute([$username,$email,$pass]);
$LAST_ID = $this->conn->lastInsertId();

잘못됨 :

$stmt = $this->conn->prepare("SELECT * FROM users");
$sonuc = $stmt->execute();
$LAST_ID = $this->conn->lastInsertId(); //always return string(1)=0


답변

연결 개체 ($ conn)에서 lastInsertId () 메서드를 실행하여 마지막 트랜잭션의 ID를 얻을 수 있습니다.

이처럼 $ lid = $ conn-> lastInsertId ();

문서를 확인하십시오 https://www.php.net/manual/en/language.oop5.basic.php


답변