ID des eingefügten Datensatzes ermitteln (PDO)

jan99

Benutzer
Beiträge
14
Moin!

ich möchte nachdem ich einen Datensatz in einer Tabelle mittels PDO angelegt habe weitere Tabellen befüllen. Für die Verknüpfung muss ich dann dort wiederum die ID des zuvor erstellten Datensatzes wissen.

Mache ich das über den größten Zahlenwert, was Probleme geben kann wenn zwei kurz hintereinander aktiv waren, oder gibt es unter PDO andere Wege?

Gruß Jan
 
Werbung:
Datenbanken stellen für sowas Funktionen bereit, die die letzte vergebene ID in der aktuellen Session liefern. In sqlite scheint dies last_insert_rowid() zu sein.
 
Moin!
so, nun wollte ich loslegen und habe mir das auch angeschaut. Ich bekomme aber immer wieder die Meldung:

Fatal error: Call to undefined method PDOStatement::last_insert_rowid() in C:\PHProject\EBL_SoftwareInventar\ebl_class_crud.php on line 2035

Mein Code sieht wie folgt aus und hat auch seinen Job gemacht:

public function PDO_Create(){
$PDO_statement = "INSERT INTO ".$this->tabelle." (";
$variables ="";
$variables_seperator ="";
$values = "";

foreach ($this->cdata as $key => $value) {
if ($key != 'id'){
$variables .= $variables_seperator."'".$key."'";
if(substr($key,0,3)=="IS_" || substr($key,0,3)=="ID_"){// hier sollten Zahlen übergeben werden
$values .= $variables_seperator.":".$key;
} else { // hier werden Zeichenketten übergeben
$values .= $variables_seperator.":".$key;
}//endif

$variables_seperator=", ";
}//endif
}//end-foreach

$PDO_statement .= $variables.") VALUES (".$values.")";

echo "PDO_statement:= ".$PDO_statement."<br>";

$create = $this->db->prepare($PDO_statement);

foreach ($this->controls as $control)
{
$befehl = ":".$control["column"];
// echo "bind:= ".$befehl."<br>\n";
// echo "cdata:= ".$this->cdata[$control["column"]]."<br>\n";
$create->bindValue(":".$control["column"], $this->cdata[$control["column"]]);
}//end-foreach

try {
$create->execute();

// Abfrage der LastID bei den Tabellen Rechner bzw. Mitarbeiter um andere Tabellen nachzuführen.

$this->last_insert_rowid = $create->last_insert_rowid(); // das ist Zeile 2035

Kann mir einer von Euch weiterhelfen??

Gruß Jan

 
Bin kein PHP-Experte und das ist auch kein PHP-Forum aber Du bekommst die letzte id in der Regel vom PDO-Objekt.
 
Moin!

also $create->execute(); hat bei mir nicht die richtige ID zurück geben.

Es ist doch eigentlich egal, ob PHP oder etwas anderes.

Dieses ist doch ein Datenbankforum und da sollte doch PDO das entscheidende sein.

In PHP: PDOStatement::execute - Manual steht außerdem

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Gruß Jan
 
Werbung:
Es ist doch eigentlich egal, ob PHP oder etwas anderes.

Dieses ist doch ein Datenbankforum und da sollte doch PDO das entscheidende sein.

Zitat:

===
What is PDO?
PDO is an acronym for PHP Data Objects. PDO is a lean, consistent way to access databases. This means developers can write portable code much easier. PDO is not an abstraction layer like PearDB. PDO is a more like a data access layer which uses a unified API (Application Programming Interface).
===


Was genau hat es denn zurückgegeben? "nicht die richtige" kann irgendwas sein, oder z.B. auch 0. Und ja, ->execute() liefert die auch nicht, sondern $conn->lastInsertId().


PHP: PDO::lastInsertId - Manual
 
Zurück
Oben