2010-12-15 12 views
1

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.

Antwort

4

Möglicherweise haben Sie ein grundlegendes Missverständnis: Wenn Sie zu mysqli wechseln, verwenden Ihre mysql_* Funktionen nicht mehr die gleiche Verbindung.

LAST_INSERT_ID() funktioniert pro Verbindung.

Sie müssen diese Abfrage mit der gleichen Bibliothek/Verbindung wie die Hauptabfrage durchführen, oder wie @zerkms angibt, verwenden Sie $conn->insert_id.

+1

Diese Antwort enthält die Zeile '$ conn-> insert_id' – zerkms

+0

@zerkms Nice! Hinzugefügt, danke. –

+0

Es macht keinen Sinn, eine Abfrage zu verwenden, um die letzte Einfüge-ID abzurufen, wenn Sie über API-Funktionen verfügen. – vanneto

1
+0

Danke. Ich habe gesucht, war aber erfolglos. Weißt du, ob mysqli_insert_id() die zuletzt eingefügte Zeile in der Datenbank als Ganzes zurückgibt oder pro Sitzung? Für den Fall, dass mehrere Benutzer einfügen, möchte ich die zuletzt eingefügte ID des Benutzers, der die Einfügung vorgenommen hat, abrufen. – Jason

+0

@Jason, es ist die letzte Abfrage für das mysqli-Objekt. –

Verwandte Themen