2016-04-13 2 views
0

Ist es möglich, die insert_id der vorherigen zwei Abfragen zu erhalten? Ich bin in der Lage, den letzten zu bekommen, aber würde die vorherigen zwei mögen. Im folgenden Beispiel möchte ich, sobald das Formular verarbeitet wurde, der Adresstabelle eine neue Rolle hinzufügen, der Rollentabelle eine neue Zeile hinzufügen und dann den Kunden eine Zeile hinzufügen, indem ich die IDs aus den in den vorherigen beiden Abfragen eingegebenen Abfragen verwende. Ist das überhaupt möglich?mysqli - möglich, insert_id von zwei vorherigen Abfragen in der Transaktion zu erhalten?

if(isset($_POST["submit"])) : 
    $username = $_POST["username"]; 
    $password = $_POST["password"]; 
    $role = $_POST["role"]; 
    $permission1 = intval($_POST["permission1"]); 
    $permission2 = intval($_POST["permission2"]); 
    $city = $_POST["city"]; 
    $state = $_POST["state"]; 
    mysqli_autocommit($connection,FALSE); 
    mysqli_query($connection,"INSERT INTO Address(city, state) VALUES('{$city}', '{$state}')"); 
    mysqli_query($connection,"INSERT INTO Roles(roleName, permission1, permission2) VALUES('{$role}', '{$permission1}', '{$permission2}')"); 
    mysqli_query($connection,"INSERT INTO Customers(username, password, roleId, addressId) VALUES ('{$username}', '{$password}'," . mysqli_insert_id($connection) . " , " . mysqli_insert_id($connection) . ")"); 
    if(mysqli_error($connection)): 
    echo mysqli_error($connection); 
    endif; 
    mysqli_commit($connection); 
endif; 

Die mysqli_insert_id($connection) in der letzten Abfrage wird zweimal die Id aus dem Roles Einsatz ziehen. Gibt es eine Möglichkeit, die beiden Id-Werte aus den ersten beiden Abfragen abzurufen?

+0

Nein, es wird die letzte ID eingefügt, wie es auf der Dose steht. Rufen Sie es nach jeder Abfrage, die Sie möchten, die ID von und speichern Sie in einer Variablen. –

+2

Speichern Sie es einfach als Variable. '/ * erste Abfrage ausführen */$ id1 = mysqli_insert_id ($ verbindung);/* zweite Abfrage ausführen */$ id2 = mysqli_insert_id ($ verbindung); ' – Mike

+0

Danke! Neu in diesem Zeug wusste also nicht, ob die insert_id-Funktion fehlschlagen würde, wenn sie außerhalb einer Abfrage steht. –

Antwort

0
if(isset($_POST["submit"])) : 
$username = $_POST["username"]; 
$password = $_POST["password"]; 
$role = $_POST["role"]; 
$permission1 = intval($_POST["permission1"]); 
$permission2 = intval($_POST["permission2"]); 
$city = $_POST["city"]; 
$state = $_POST["state"]; 
mysqli_autocommit($connection,FALSE); 

mysqli_query($connection,"INSERT INTO Address(city, state) VALUES('{$city}', '{$state}')"); 
//this will give you first id// 
$first_inserted_id = mysqli_insert_id($connection); 

mysqli_query($connection,"INSERT INTO Roles(roleName, permission1, permission2) VALUES('{$role}', '{$permission1}', '{$permission2}')"); 
//this will give you second id// 
$second_inserted_id = mysqli_insert_id($connection); 

mysqli_query($connection,"INSERT INTO Customers(username, password, roleId, addressId) VALUES ('{$username}', '{$password}'," . $first_inserted_id . " , " . $second_inserted_id . ")"); 

//this will give you third id// 
$third_inserted_id = mysqli_insert_id($connection); 

if(mysqli_error($connection)): 
    echo mysqli_error($connection); 
endif; 
    mysqli_commit($connection); 
endif; 
+0

Im Allgemeinen sollten Sie einen Text bereitstellen, der Ihre Antwort erklärt, nicht nur den Code. Außerdem verwenden Sie nicht '$ first_inserted_id' oder' $ second_inserted_id'. – Mike