3 Stimmen

Gibt insert_id() in Codeigniter bei einem Abfragefehler false zurück?

Was gibt insert_id() nach einer fehlgeschlagenen Einfügung zurück?

10voto

Igor Parra Punkte 9854

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: int

Beschreibung: [ ] 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.

3voto

Justin Ethier Punkte 126797

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;

1voto

powerc9000 Punkte 2012

Die meisten Codeigniter-Funktionen geben false zurück, wenn sie keinen Wert liefern können. Ich meine, es würde nicht die insert_id zurückgeben, weil es keine insert_id wegen eines Fehlers zu geben gibt.

1voto

Moyed Ansari Punkte 8306

Es gibt die ID nur zurück, wenn es eine Datenbankeinfügung durchführt.

Im Erfolgsfall wird die AUTO_INCREMENT-Spalte durch die vorherige Abfrage erzeugt Im Falle eines Fehlers wird 0 zurückgegeben. Gibt FALSE zurück, wenn keine MySQL-Verbindung hergestellt wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X