TS: $mysqli->insert_id wird nicht übernommen

Beitrag lesen

Hallo und guten Tag,

[...]dann nicht in der Datenbank und nimmst LAST_INSERT_ID()?

Weil ich das bis jetzt immer nur mit $mysqli->insert_id; gelernt habe und wie gesagt die letzten Monate hat es damit auch ohne Probleme funktioniert. Hat sich an PHP diesbezüglich irgendetwas geändert, warum dieses auf einmal nicht mehr geht?

Warum das mit $mysqli->insert_id nicht funktioniert, kann ich mir auch nicht vorstellen. Das kann eigentlich nur passieren, wenn man zwischendurch mit der Connection oder dem Objekt etwas anderes anstellt.

Ich würde das aber an deiner Stelle im Auge behalten. Wenn es nämlich ein Bug sein sollte (ist in den seltensten Fällen so...), dann könnten ja noch andere Seiteneffekte vorhanden sein.

OK, so funktioniert es wieder

if ($stmt = $mysqli->prepare("INSERT INTO web_produkttypen (py_titel, py_status) VALUES (?, ?)"))
{    
  $py_titel 	= $_POST["titel"];
  $py_status 	= $_POST["status"];
  
  $stmt->bind_param("ss", $py_titel, $py_status);
  $stmt->execute();
}
  else {
  echo $mysqli -> error;
}

if ($stmt = $mysqli->prepare("INSERT INTO web_preis_settings set ps_pTypID = LAST_INSERT_ID()"))
{    
  $stmt->execute();
}
else {
  echo $mysqli -> error;
}

Umkopieren der POST-Variablen ist nicht mehr notwendig. Wenn die "as it is" in die Datenbank sollen, kannst Du die direkt ins Bind einsetzen.

Du musst übrigens sie Statements nicht immer neu preparen. Sosie die Verbindung steht, kannst Du die Statements, die Du immer brauchst, auch sammeln:

$stmt['insert_id'] = $mysqli->prepare("INSERT INTO web_preis_settings set ps_pTypID = ?  
$stmt['insert_prod] = $mysqli->prepare("INSERT INTO web_produkttypen (py_titel, py_status) VALUES (?, ?)"))  

usw.

Und dann brauchst Du nur noch die frischen Variablen an das passende Statement zu binden und das Query absenden. Das ist bei komplexeren Statements schon mal ganz praktisch.

Grüße
TS