Entwickler-Ecke

Programmiersprachen (Server) - Autoinkrement-Wert bei "Insert" erhalten


Heiko - Di 04.12.07 21:40
Titel: Autoinkrement-Wert bei "Insert" erhalten
Hallo,

ich füge, wie der Titel bereits sagt, per Insert einen Datensatz bei MySQL ein, aber wie erhalte ich die automatisch erzeugte ID zurück, ohne noch einmal auf die DB zuzugreifen?

Grüße
Heiko


mkinzler - Di 04.12.07 21:43

Per Api last_inserted_id()


Heiko - Di 04.12.07 21:49

Ah danke, die war mir unebekannt und auch nicht per Google auf Anhieb zu finden (ich wollte gucken, ob man mit dem $result das rauskriegt, aber beim einfügen erhält man ja nur zurück, ob Fehler oder nicht).


GTA-Place - Do 06.12.07 18:10

Danke, ich habs immer wieder ausgelesen danach :lol:


Heiko - Mo 10.12.07 21:28

Hallo,

noch einmal ne kurze Frage dazu, da ich die Funktion nicht bei php.net bzw. dev.mysql.net direkt finde:
Was gibt er hier zurück, falls eine ID angegeben wird, die es in der Db nicht gibt?


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  public function modifyPage($id, $alias, $title, $layout)
  {
    if (!is_numeric($id)) {
      throw new Exception("Beim Modifizieren von einer Seite müssen Sie eine ID angeben");
    }
    $this->preparePageChangeData($alias, $title, $layout);
    $id = 0;
    $sql = "UPDATE layouts SET alias='".$alias."' title='".$title."' layout='".$layout."' WHERE id=".$id." LIMIT 1";
    if ($this->db->uquery($sql)) $id = $this->db->last_inserted_id();
    return $id;
  }


Martok - Di 11.12.07 00:31

Öhm, bei Update gibts doch eh keine last_inserted_id oder versteh ich deinen Code falsch?

Auf jeden fall kannst du über (mysql_) affected_rows() prüfen, wie viele Zeilen betroffen waren.


Heiko - Di 11.12.07 09:09

Das ist ja die Frage, ob er das auch macht ;). Zu mindestens suche ich dafür auch eine Variante um die ID auszulesen.

@affected_rows: Den befehl habe ich schon gefunden, aber darüber würde ich ja maximal wissen, ob er was geupdated hat, oder nicht. Aber nicht, welche ID :(.


ene - Di 11.12.07 09:28

Welche ID geändert wurde, siehst du doch schon in der $id...was soll der Sinn davon sein? Du aktualisierst ja Werte und mit affected_rows bekommst du die Anzahl der geänderten DS zurück.

Wenn du False zurückbekommst, wird die Methode nicht unterstützt.


Heiko - Di 11.12.07 09:40

:autsch: manchmal ist man echt blind ;).

Allerdings wäre es interessant zu wissen, ob man den Primären Key (die ID) herausfindet, wenn man z.B. per alias etwas ändert. Allerdings vermute ich, dass man da nicht um 2 Abfragen rumkommt, da ein Update ja mehrere Zeilen betreffen kann.

PS @ Martok: affected_rows ist keine Methode, sondenr lediglich eine Variable ;) (bei OOP-MySQLi ;) )