2012-05-21 4 views
104

Ho una query e desidero ottenere l'ultimo ID inserito. L'ID campo è la chiave primaria e l'incremento automatico.PDO ottiene l'ultimo ID inserito

So che devo usare questa dichiarazione:

LAST_INSERT_ID() 

Tale dichiarazione lavora con una query come questa:

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

Ma se voglio ottenere l'ID con questa dichiarazione:

$ID = LAST_INSERT_ID(); 

ottengo questo errore:

Fatal error: Call to undefined function LAST_INSERT_ID() 

Cosa sto facendo male?

risposta

220

Questo perché è una funzione SQL, non PHP. È possibile utilizzare PDO::lastInsertId().

come:

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

Se si vuole farlo con SQL invece di API DOP, si dovrebbe fare come un normale query di selezione:

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

sì hai ragione, ho trovato e funziona, grazie, io accetterò risposta –

+2

@IllyasMimouni Si può spiegare in che modo la tua modifica offre maggiore sicurezza? L'involucro di una singola istruzione in una transazione non offre nulla. – Corbin

+0

@Corbin: cancello la parte, avevi ragione. – Mimouni

4

lastInsertId() lavora solo dopo la query INSERT.

corretta:

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

errato:

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

Esempio errato, le variabili non hanno posto nelle query. Usa le dichiarazioni preparate: http://php.net/manual/en/pdo.prepared-statements.php –