Um meine Skripts sicherer zu machen, habe ich begonnen, vorbereitete Anweisungen zu verwenden, um die Injektion von MySQL zu verhindern. Dieses Skript fügt die Daten problemlos ein, aber das Abrufen der letzten eingefügten ID (basierend auf der automatischen Inkrementierung in der Datenbank) gibt jetzt 0 zurück, wenn es die richtige ID-Nummer zurückgeben soll.Vorbereitete Anweisungen und ihre Auswirkungen auf Abfragen
Dieser Teil fügt nur gut ein.
$stmt = $conn->prepare("INSERT INTO users (userName) VALUES (?)");
$stmt->bind_param("s", $_SESSION['username']);
$stmt->execute();
Hier habe ich Probleme. Ich versuche, die zuletzt eingefügte ID des Benutzers zu erhalten und es kehrt 0.
// Get the last inserted ID for the users ID
$query = "SELECT LAST_INSERT_ID()";
$result = mysql_query($query);
if ($result) {
$nrows = mysql_num_rows($result);
$row = mysql_fetch_row($result);
$userId = $row[0];
}
Diese Arbeit war, als ich mein Skript hatte zuvor auf Prepared Statements beginnen. Das einzige, was ich verändert wurde Zugabe der vorbereiteten Anweisung die Daten und meine DB-Verbindung ist einfügen wie folgt:
$conn = new mysqli($server, $user, $password, $database) or die('Could not connect: ' . mysql_error());
Ich bin ein noob mit PHP so wäre jede Hilfe sehr geschätzt.
Diese Antwort enthält die Zeile '$ conn-> insert_id' – zerkms
@zerkms Nice! Hinzugefügt, danke. –
Es macht keinen Sinn, eine Abfrage zu verwenden, um die letzte Einfüge-ID abzurufen, wenn Sie über API-Funktionen verfügen. – vanneto