2013-10-23 8 views
5

Ich habe vor 3 ~ 4 Jahren programmiert, und ich erinnere mich, dass in einigen 2005 php Sicherheitsbuch über die Sicherheit der Verwendung von mysql_insert_id, um die Last_inser_id abrufen.Codeigniter insert_id() -Funktion die letzte Einfüge-ID korrekt abrufen?

In dem Buch sagt, dass, wenn mehrere Anfragen an den Server zur gleichen Zeit (Tausende), könnte das Abrufen von last_insert_id falsch, endet mit Benutzer-ID auf andere Benutzer zeigen.

Jetzt sind wir im Jahr 2013, was ihr darüber zu sagen habt, und besonders mit codeigniter insert_id().

pd: Ich habe versucht, relevante Informationen über meine Frage an anderen Orten zu finden, aber ich habe nicht etwas Konkretes gefunden.

Antwort

7

Wer dieses Buch geschrieben hat, ist voller Mist. LAST_INSERT_ID() ist spezifisch für die Verbindung und die Verbindung ist spezifisch für den aktuellen Aufruf des Skripts. Ich kann mir keinen Weg vorstellen, wie ich das kaputt machen könnte, ohne nach einer Nacht mit starkem Alkoholkonsum etwas PHP-Quellcode neu schreiben zu müssen.

Vielleicht, wenn Sie persistente Verbindungen verwenden, und dann wenn die letzte Verbindung hat einen Einsatz, und dann Sie LAST_INSERT_ID() genannt, sich erfolgreich einsetzen, bevor tun [Sie Ihre Rückgabewerte überprüfen, richtig?], dann vielleicht Sie könnte einen schlechten Wert bekommen. Es fällt mir jedoch sehr schwer, mir vorzustellen, dass dies möglich ist.

Solange Sie LAST_INSERT_ID() sofort nach dem INSERT ausgeführt werden, haben Sie einfach immer den richtigen Wert zurückgegeben.

Hier ist, wie Sie es brechen könnte, wenn man wirklich wollte:

$db_obj->insert('some data'); 
$db_obj->some_function_that_also_inserts_but_i_forgot_it_does_that('derp'); 
$id = $db_obj->last_insert_id(); 
+0

Dank für Ihren Kommentar danken, kann ich nicht Ihre Antwort upvote wegen meiner guten Ruf, aber wirklich danke. –

+0

@JoseFaro Klicken Sie auf das Kontrollkästchen, um die Antwort zu akzeptieren, es ist * way * besser als ein upvote. – Sammitch