Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Eindeutige ID in PHP (MySQL) erzeugen?

Frage Entwicklung PHP

Mitglied: StefanKittel

StefanKittel (Level 4) - Jetzt verbinden

04.02.2011, aktualisiert 17.02.2011, 8279 Aufrufe, 6 Kommentare, 1 Danke

Hallo,

ich möchte gerne sicherheitstechnisch unkritische Einträge in einer Datenbank speichern.
Jeder Datensatz soll eine eindeutige ID haben.

Jetzt bin ich ein bischen genervt, dass das scheinbar nirgendwo vorgesehen ist.

Ich habe genügend Beispiele mit denen sich IDs erzeugen lassen wo es 100 mal wahrscheinlicher ist im Lotto zu gewinnen, aber nicht Null.

1) Autoincrement Wert einer MySQL Datenbank. Der ist definitiv eindeutig.
Aber ich bekomme die IDs meinen Datensatzes ja nur über mysql_insert_id erhalten. Also die ID des zuletzt angefügten Eintrages.
Bei einem Multithreadingsystem kann es aber doch passieren, das zwischen hinzufügen und auslesen woanders noch ein Eintrag hinzugefügt wird.

2) PHP Unique basiert auf der Zeit in Mikrosekunden. Auch da ist es nicht unmöglich, dass dieses doppelt vorkommt.

PCNamen des Clients, Laufzeit des Clients: Alles ist nicht eindeutig.

Die Kombination aus PCNamen des Clients, Laufzeit des Clients, LAN IP, WAN IP, Name des Benutzers, PHP Unique
Alles schon recht unwahrscheinlich, aber nicht Null....

Ist alles theoretisch, aber warum kann php unique nicht über eine CriticalSection nach dem Erzeugen einfach eine Mikrosekunde warten?
Gibt es sowas?

Danke

Stefan

PS: Eine CriticalSection ist eine Funktion die dafür sorgt, dass eine Routine nur einmal zur Zeit aufgerufen werden kann.
Mitglied: maretz
05.02.2011 um 08:54 Uhr
Naja - du kannst ja schon einiges machen.

Entweder generierst du dir im Programm eine eindeutige ID (z.B. Millisekunden und die PID des Threads, einer eindeutigen Thread-ID o.ä.). Oder du nutzt z.B. Transaktionen. Diese kann ja z.B. beinhalten:

start-transaktion
trage Datensatz in Tabelle 1 ein
lese ID des Datensatzes nochmal aus
trage Datensatz inkl. ID in Tabelle 2 ein
....
ende-transaktion

Da darf in der Zeit niemand an der Tabelle drehen - das verhindert dein DBMS....
Bitte warten ..
Mitglied: StefanKittel
05.02.2011 um 10:23 Uhr
Zitat von maretz:
Da darf in der Zeit niemand an der Tabelle drehen - das verhindert dein DBMS....
Moin, und das ist mein Problem
Es sind mehrere Computer in verschiedenen Netzwerken die keine Verbindung untereinander haben.
Einzige zentrale Instanz ist ein Debian Webserver mit PHP, MySQL (nur via PHP) und FTP.
Es besteht die, wenn auch sehr sehr geringe Möglichkeit, dass zwei PCs mit dem gleichen Namen zur gleichen Uhrzeit einen Datensazu anlegen möchten.

Ich werde es wohl über FTP lösen. Datei öffnen mit Share Deny all (Also Zugriff für alle anderen Verweigern).

Ich findes es nur komisch, dass die Unique Funktion bei PHP das nicht kann und dass es beim MySQL Keine Funktion gibt welche einen Datensatz anlegt und dessen ID zurückgibt.
Ich hatte gehoffe ich wäre nur zu blind.

Stefan
Bitte warten ..
Mitglied: Dani
05.02.2011 um 13:52 Uhr
Hi Stefan,
du hast die Möglichkeit MySQL-Tabellen für andere Zugriffe zu sperren/entsperren bis der Thread fertig ist. Handbuch.


Grüße,
Dani
Bitte warten ..
Mitglied: StefanKittel
05.02.2011 um 13:54 Uhr
Hallo Dani,
perfekt.

Danke!

Stefan
Bitte warten ..
Mitglied: dog
05.02.2011 um 14:13 Uhr
PHP ist kein Multithreading-System und mysql_insert_id bezieht sich immer auf das letzte INSERT der aktuellen Verbindung.
Auch wenn zwischen deinem Insert noch 100 weitere Zeilen von anderen Benutzern kommen gibt es da kein Problem.

The value of mysql_insert_id() is affected only by statements issued within the current client connection. It is not affected by statements issued by other clients.

http://dev.mysql.com/doc/refman/5.0/es/mysql-insert-id.html
Bitte warten ..
Mitglied: StefanKittel
05.02.2011 um 14:58 Uhr
Hallo dog,
schick, in meiner doku stand das nicht.
Es kam mir gleich so komisch vor, denn auf hochfrequentierten Systemen (Server von Amazon z.B.) würde das sonst ja gar nicht funktionieren.
Danke
Stefan
Bitte warten ..
Ähnliche Inhalte
PHP
PHP statements mit PHp erzeugen
gelöst Frage von LorderichPHP4 Kommentare

Hallo zusammen, ich habe eine Datei, in welcher per switch und case die Webseiten definiert werden, welche bei Aufruf ...

PHP
PHP Tabellen automatisch nach Gruppen ID aus MYSQL erstellen
Frage von KyrinjaPHP8 Kommentare

Hallo liebe Gemeinde, ich sitze z.Z an einer Fahrzeugübersicht für unsere Feuerwehr. Hier würde ich gerne Tabellen dynamisch je ...

PHP
PHP Grafiken erzeugen und nachher löschen
gelöst Frage von tsunamiPHP6 Kommentare

Hallo, ich habe mal eine generelle taktische Frage. Ich habe ein Skript welches mir ein Tortendiagramm erzeugt, Ganz wunderbar ...

PHP
PHP und MAX id bzw. LAST INSERT ID
gelöst Frage von ProtectedPHP8 Kommentare

Hallo, ich benötige die Letzte ID von der Tabelle xy. Leider kann ich LAST_INSERT_ID nicht verwenden, weil kein INSERT ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 7 StundenWindows 101 Kommentar

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 9 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 23 StundenInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server16 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server12 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...