Matze: PDO - lastInsertId will nicht

Hallo,

ich führe mit PDO ein INSERT in einer MySQL-Datenbank aus.
Das funktioniert auch prima:

$sql = "INSERT INTO tbl (col1, col2, col3) VALUES (:value1, 1, :value2)";  
$prepare = $dbCon->prepare($sql);  
$prepare->bindParam(':value1', $userData['data1']);  
$prepare->bindParam(':value2', $userData['data2']);  
if(!$prepare->execute()){  
    throw new Exception('Fehler: Es gibt einen Fehler bei der Datenbankverbindung.');  
}

Schiebe ich aber hinerher

$lastId = $prepare->lastInsertId;  
return $tempId;

um mir die ID anzeigen zu lassen ist der Wert immer leer. Warum ist das so?
Das Handbuch sagt dazu das.
Sollte doch klappen oder nicht?

Danke für eure Hilfe!

Grüße, Matze

  1. $lastId = $prepare->lastInsertId;

    return $tempId;

      
    Sorry, ein Copy/Paste-Fehler. Beide Variablen heißen gleich, nämlich $lastId.  
      
    Grüße, Matze
    
  2. Hi!

    $lastId = $prepare->lastInsertId;
    um mir die ID anzeigen zu lassen ist der Wert immer leer. Warum ist das so?

    Das sagt dir ein auf E_ALL stehendes error_reporting (mit display_errors auf on).

    Das Handbuch sagt dazu das.
    Sollte doch klappen oder nicht?

    So wie es im Handbuch steht, sollte es klappen. So machst du es aber nicht. Achte darauf, in welchem Object die Eigenschaft angesiedelt ist.

    Lo!

    1. Hallo dedlfix,

      Das sagt dir ein auf E_ALL stehendes error_reporting (mit display_errors auf on).

      Nee, das sagt mir ebend irgendwie gar nix.
      Wenn ich schreibe error_reporting('E_ALL'); ändert sich an meinem Problem gar nichts :(
      Wenn ich schreibe error_reporting('E_ALL'); und dann lastInsertId() (also mit Klammern) kommt nur noch ein weißer Bildschirm.
      Wenn ich _nicht_ error_reporting('E_ALL'); schreibe und lastInsertId() (also mit Klammern) kommt
      "Call to undefined method PDOStatement::lastInsertId()"

      So wie es im Handbuch steht, sollte es klappen. So machst du es aber nicht. Achte darauf, in welchem Object die Eigenschaft angesiedelt ist.

      Oh huch. Danke schön!
      Der Einfluss von error_reporting('E_ALL'); wundert mich aber ein bisschen.
      Oder liegt das daran, dass das Stück in einer Klasse steht die auch noch über try{ .. }catch(){ .. } geprüft wird?

      Danke und Grüße, Matze

      1. Hallo!

        Wenn ich schreibe error_reporting('E_ALL');

        Das sollst Du auch nicht! Die Funktion error_reporting erwartet einen Integerwert - z.B. als PHP-eigene Konstante notiert - aber keine Zeichenkette als Parameter.

        Ciao

        GG

        --
        "If I do not seek to understand what is happening here
        - then I've got peanuts in my head!"
        (I. Hosein)
      2. Hi!

        Wenn ich schreibe error_reporting('E_ALL'); ändert sich an meinem Problem gar nichts :(

        E_ALL ist eine Konstante, keine Zeichenkette.

        Oder liegt das daran, dass das Stück in einer Klasse steht die auch noch über try{ .. }catch(){ .. } geprüft wird?

        try-catch prüft auf das Auftreten von Exceptions. PHP-Fehler sind aber keine Exceptions. Einige wenige mit PHP mitgelieferte Klassen werfen solche, die mysqli-Klassen jedoch nicht.

        Lo!

        1. E_ALL ist eine Konstante, keine Zeichenkette.
          try-catch prüft auf das Auftreten von Exceptions. PHP-Fehler sind aber keine Exceptions. Einige wenige mit PHP mitgelieferte Klassen werfen solche, die mysqli-Klassen jedoch nicht.

          Danke, irgendwie ist heut wohl nicht mein Tag.
          Zudem beschäftige ich mich auch erst ganz frisch mit den Möglichkeiten von Prepared Statements. Da kommen solche Fehler wohl erstmal vor :(

          Grüße, Matze