Was gibt insert_id() nach einer fehlgeschlagenen Einfügung zurück?
Antworten
Zu viele Anzeigen?Ich denke, das hängt von dem Treiber ab, den Sie verwenden. In mysql Fall ist die Funktionsdefinition:
/**
* Insert ID
*
* @access public
* @return integer
*/
function insert_id()
{
return @mysql_insert_id($this->conn_id);
}
Jetzt lesen über mysql_insert_id
:
mysql_insert_id (PHP 4, PHP 5) Ermittelt die in der letzten Abfrage erzeugte ID
Parameter:
resource $link_identifier [optional]Rückgabe:
Typ: intBeschreibung: [ ] AUTO_INCREMENT-Spalte durch die vorherige Abfrage bei Erfolg erzeugt wurde, 0, wenn die vorherige Abfrage keinen AUTO_INCREMENT-Wert erzeugt hat, oder false, wenn keine MySQL-Verbindung hergestellt wurde.
1.- Es könnte also eine ID, 0 (Null) oder false zurückgegeben werden.
2.- Und wenn Sie um eine failed insert
sollte er 0 (Null) zurückgeben.
Beachten Sie, dass Sie eine at sign (@)
Fehleroperator, der jede Fehlermeldung ignoriert, die von der mysql_insert_id
PHP-Funktion.
Wenn man sich die Datenbanktreiber selbst ansieht, ist jede Version von insert_id
ist je nach der zugrunde liegenden Datenbank unterschiedlich implementiert. Zum Beispiel kann die MySQL insert_id
Funktion ist nur ein Wrapper um mysql_insert_id
die zurückgegeben wird:
Die ID, die für eine AUTO_INCREMENT-Spalte durch die vorherige Abfrage bei Erfolg erzeugt wurde, 0, wenn die vorherige Abfrage keinen AUTO_INCREMENT-Wert erzeugt hat, oder FALSE, wenn keine MySQL-Verbindung hergestellt wurde.
Auf der anderen Seite ist die Postgres-Funktion gibt explizit eine ID zurück (obwohl ich vermute, dass eine Ausnahme ausgelöst werden könnte, wenn die Abfrage selbst fehlschlägt):
$query = $this->query($sql);
$query = $query->row();
return (int) $query->ins_id;