php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.05.2007, 11:33  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Zitat:
Zitat von dr.e.
Zitat:
Wie darf man denn das verstehen? :Smile
Ich nehme mal an, weil Zergling weiß, dass man sich durch mysql_insert_id() erst recht Race Conditions ermöglicht...

Statt dessen sollte man nach einem Statement mit

Code:
SELECT LAST_INSERT_ID()
die letzte auto_increment-ID abfragen. Steht meines Wissens auch unter http://de2.php.net/mysql_insert_id .
Konnte da im Manual nichts dazu finden. Das einzige was ich finden konnte war der Fall, dass ein Query fehlschlägt und mysql_insert_id() dann nicht false,0, null liefert sondern eben den Wert des letzten erfolgreichen Queries. Aber das sollte ja kein Problem sein, wenn man Fehler abfängt.

Ansonsten verteh ich nicht ganz wo das Problem liegen soll (auch wenn man wie du für einen Request genau eine DB-Verbindung benutzt) bzw. wie LAST_INSERT_ID dieses Problem löst.
Vielleicht kann mir ja einer einen Beispielfall konstruieren!?
__________________
Today you...Tomorrow me.
agrajag ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 12.05.2007, 17:45  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

@Razor: ich benutze kein mysql_pconnect(), sondern eine Singleton-Instanz meiner MySQL-Klasse. Persistente Connections sind über die Laufzeit des Webserverprozesses verfügbar, wenn diese einmal aufgebaut ist. Das ist meines Wissens ähnlich dem JAVA-Connection-Pooling.

Wenn ich für jede Abfrage eine eigene Verbindung nutzen würde - was verdammt unperformant ist - hättest du hier kein Problem. Da musst du aber sicherstellen dass du Abfragen mit

-> connect
-> query
-> mysql_insert_id()
-> close

in genau der Reihenfolge in deiner Applikation einbaust - z.B. in einer DB-Abstraktions-Schicht.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 13.05.2007, 17:06  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Welchen Vorteil LAST_INSERT_ID() gegenüber mysql_insert_id() haben soll, habe ich immer noch nicht verstanden. Race conditions erzeugen oder verhindert tut man mit LAST_INSERT_ID jedenfalls schonmal nicht. Wenn man zwei INSERT Stamtents abschickt, bekommt man sowohl mit LAST_INSERT_ID als auch mit mysql_insert_id jeweils die id der letzten Operation zurück.
Schnulli ist offline  
Alt 13.05.2007, 17:35  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Schnulli,

du behauptest hier Dinge, die nicht stimmen. Unter http://de3.php.net/manual/en/functio...-insert-id.php steht sogar eine Note dazu. Wenn du eine komplexe Struktur von Modulen hast, die warum auch immer beim Ausführen einen INSERT haben und anschließend die LAST_INSERT_ID weiterverwenden wollen, kann es sehr wohl zu Race Conditions kommen. Das ist sogar einer der beliebtesten Fälle.

Wenn du jedoch wie in meinem letzten Post beschrieben das Query absenden abstrahierst und direkt nach jeder Query die LAST_INSERT_ID per mysql_insert_id() abfragst wird das sicher nicht problematisch.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 14.05.2007, 15:22  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Hallo dr.e.
Weder bei http://de3.php.net/manual/en/functio...-insert-id.php noch bei http://de3.php.net/manual/de/functio...-insert-id.php werden race conditions beschrieben. Der Sinn wird klarer, wenn man die Aussagen mit http://dev.mysql.com/doc/refman/4.1/...insert-id.html vergleicht. Gerade bei größeren, komplexeren Systemen ist das Verhalten von mysql_insert_id vorzuziehen.
Schnulli ist offline  
Alt 14.05.2007, 15:46  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

*popcorn-hol*
Zergling-new ist offline  
Alt 14.05.2007, 17:49  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Schnulli,

ok, dann lass uns den Klappstuhl wieder eingraben.

Ich hab mich dann wahrscheinlich einfach blöd angestellt, als ich dererlei Effekte beobachtet habe.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 14.05.2007, 18:05  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Zitat:
Zitat von dr.e.
ok, dann lass uns den Klappstuhl wieder eingraben.
oh, so war das garnicht gemeint. Deshalb habe ich den letzten Beitrag ja auch komplett unpersönlich geschrieben.
Ich hatte nur den Eindruck, als ich mich jetzt aus beruflichen Gründen etwas mit php und zend core ausseinander gesetzt habe, dass die Legendenbildung bei php etwas über dem Durchschnitt liegt
Also bitte nicht persönlich nehmen, wenn ich mal forsch "Warum?" zurückfrage. Und gerade bei den Datenbankanbindungen werde ich halt etwas hellhörig.
Schnulli ist offline  
Alt 14.05.2007, 20:02  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Schnulli,

ist schon OK. Ich sprach nur aus Erfahrung. Damit sollte der Thread auch zur Genüge mit Beiträgen gefüllt sein.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Rechnungsnummer Vergabe ohne auto_imcrement Torsten.E Datenbanken 13 30.05.2007 17:00
syntax problem: fortlaufende textboxnummerierung in variable PHP Tipps 2005-2 4 06.09.2005 23:13
fortlaufende rechnungsnummern lindner PHP Tipps 2005-2 3 26.08.2005 09:30
Fortlaufende Nummer PHP Tipps 2005-2 8 27.06.2005 09:48
Fortlaufende Nummer jacos PHP Tipps 2004 4 23.08.2004 17:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql rechnungsnummer, rechnungsnummer mysql, wie ist eine rechnungsnummer aufgebaut?, wie ist die rechnungsnummer aufgebaut, java statement insert last_insert_id(), mysql_insert_id race condition, rechnungsnummer gut aufgebaut

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:29 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.