Domanda

Sono corretto nel comprendere che la funzione di mysql LAST_INSERT_ID () non ripristina tra i tentativi di inserimento (come @@ identità fa in SQL-server) ... che se l'operazione di inserimento immediatamente precedente fallisce, LAST_INSERT_ID () restituirà il pk di qualunque sia il pk dell'ultimo inserto che della connessione a qualsiasi tabella con una chiave primaria incremento automatico è stato. E se non sbaglio in questo, non questo non sembra come appena circa il comportamento più ritardato per questa funzione che si poteva trovare? Non c'è la funzione mysql che si comporta in modo simile a @@ identità di sql-server? Uno che restituirà NULL se la immediatamente precedente il tentativo di inserimento non crea nuovo record? In alternativa, come si fa a sapere con certezza la chiave primaria della più recente operazione di inserimento?

È stato utile?

Soluzione

@@ identità di solito è sbagliato in SQL Server pure. Si deve usare scope_identity() nella maggior parte dei casi, invece.

In MySql, LAST_INSERT_ID () dovrebbe essere sicuro da usare perché l'unico modo è possibile chiamare questa funzione dopo un errore di inserimento è che hai già catturato e rappresentato per l'errore di inserire correttamente. In caso contrario, si sarebbe ancora in elaborazione comandi. In altre parole, LAST_INSERT_ID () non è il meccanismo di gestione degli errori.

Altri suggerimenti

È necessario verificare se l'inserto ha avuto successo prima. Se l'inserto ha avuto successo, allora si può fare affidamento su LAST_INSERT_ID ().

modifica: in php:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query('<PUT YOUR INSERT HERE');
if(mysql_affected_rows()>0){
  $last_id=mysql_insert_id();
}else{
  //panic!
}
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top