Barksalot: ID nach Insert bekommen?

Hallo,

habe ich die Möglichkeit nach einem INSERT eine ID zu erhalten wie der Datensatz gerade erhalten hat?

// Neuer Eintrag erstellen		
if ($stmt = $mysqli->prepare("INSERT INTO defekt (

  avd_aid, 
  avd_pid, 
  avd_grund, 
  avd_beschreibung, 
  avd_menge,
  avd_mid, 
  avd_datum, 
  avd_uhrzeit,
  avd_code) 
	
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)")) {    
			 
			$avd_aid			    = $_POST["avd_aid"];
			$avd_pid			    = $_POST["avd_pid"];
			$avd_grund			  = $_POST["avd_grund"];
			$avd_beschreibung	= $_POST["avd_beschreibung"];
			$avd_menge			  = $_POST["avd_menge"];
			$avd_mid			    = $object->user_code;
			$avd_datum			  = date("Y-m-d");
			$avd_uhrzeit   		= date("H:i:s");  
			$avd_code			    = $ADCode;

				
			$stmt->bind_param("sssssssss", 
          $avd_aid, 
          $avd_pid, 
          $avd_grund, 
          $avd_beschreibung, 
          $avd_menge, 
          $avd_mid, 
          $avd_datum, 
          $avd_uhrzeit, 
          $avd_code);
		}}

	$stmt->execute();
				header("Location: $weiterleitung");
						}
				else {
						echo $mysqli -> error;
					}

Ich benötige die ID im weiteren Verlauf um einen eMail Link zusammenzubauen. Ansonsten meine Idee, ich lese die höchste ID aus addiere +1. Allerdings wenn jemand anders zur gleichen Zeit einen Eintrag vornimmt, dann habe ich ein Problem.

Bis bald!
Bernd

akzeptierte Antworten

  1. Moin,

    habe ich die Möglichkeit nach einem INSERT eine ID zu erhalten wie der Datensatz gerade erhalten hat?

    Klar, dass geht mit $mysqli->insert_id.

    Gruß
    Jo

    1. Hallo J,

      danke auch dir.

      Bis bald!
      Bernd

  2. Tach!

    habe ich die Möglichkeit nach einem INSERT eine ID zu erhalten wie der Datensatz gerade erhalten hat?

    Ja klar, das mysqli-Objekt hat eine Eigenschaft namens $insert_id, also $mysqli->insert_id, da steht sie drin.

    Außerdem hat MySQL selbst die Funktion LAST_INSERT_ID(), die du auch im nachfolgenden SQL-Statement derselben Sitzung nehmen kannst, ohne den Wert über PHP zu schleppen.

    dedlfix.

    1. Hallo dedlfix,

      danke dir. Hat wunderbar geklappt. Hab es so umgesetzt

      $stmt->execute();
      $testID = $mysqli->insert_id;
      

      Bis bald!
      Bernd

    2. Hello,

      habe ich die Möglichkeit nach einem INSERT eine ID zu erhalten wie der Datensatz gerade erhalten hat?

      Ja klar, das mysqli-Objekt hat eine Eigenschaft namens $insert_id, also $mysqli->insert_id, da steht sie drin.

      Außerdem hat MySQL selbst die Funktion LAST_INSERT_ID(), die du auch im nachfolgenden SQL-Statement derselben Sitzung nehmen kannst, ohne den Wert über PHP zu schleppen.

      Insbesondere, da das Durchschleifen durch PHP (vor PHP 7?) den Wertebereich auf BIGINT(+) [31 Bit] eingeschränkt hat, während datenbankintern der volle Wertebereich auch zum Rechnen genutzt werden kann (konnte?).

      @dedlfix : Arbeitet PHP 7 auf 64-Bit-Systemen nun auch mit der vollen Registerbreite?

      Liebe Grüße
      Tom S.

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
      1. Tach!

        Insbesondere, da das Durchschleifen durch PHP (vor PHP 7?) den Wertebereich auf BIGINT(+) [31 Bit] eingeschränkt hat, während datenbankintern der volle Wertebereich auch zum Rechnen genutzt werden kann (konnte?).

        Was aber auch meistens irrelevant ist, über Max-Int32 muss man erstmal mit seinen IDs kommen.

        @dedlfix : Arbeitet PHP 7 auf 64-Bit-Systemen nun auch mit der vollen Registerbreite?

        Weiß ich nicht.

        dedlfix.

        1. Tach!

          Arbeitet PHP 7 auf 64-Bit-Systemen nun auch mit der vollen Registerbreite?

          Weiß ich nicht.

          Weiß ich jetzt, Handbuch sagt ja, aber Integer gibts nur als nur signed.

          dedlfix.

          1. Hello,

            Arbeitet PHP 7 auf 64-Bit-Systemen nun auch mit der vollen Registerbreite?

            Weiß ich nicht.

            Weiß ich jetzt, Handbuch sagt ja, aber Integer gibts nur als nur signed.

            Also quasi 63 Bit nutzbare Breite? Danke für's Nachgucken. Hast Du den Link zur Handbuchseite noch präsent?

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es!
            Das Leben selbst ist der Sinn.
            1. Tach!

              Danke für's Nachgucken. Hast Du den Link zur Handbuchseite noch präsent?

              Stand bei Typen -> Integer.

              dedlfix.

        2. Moin @@dedlfix,

          Was aber auch meistens irrelevant ist, über Max-Int32 muss man erstmal mit seinen IDs kommen.

          manchmal reicht dazu nur ein singender und tanzender Südkoreaner 😉

          Viele Grüße
          Robert

          1. Tach!

            Was aber auch meistens irrelevant ist, über Max-Int32 muss man erstmal mit seinen IDs kommen.

            manchmal reicht dazu nur ein singender und tanzender Südkoreaner 😉

            Das war ein Counter, keine ID.

            dedlfix.