Hallo,
Eine gute Idee ist es, sprintf() zu verwenden, um sich die ständigen Zeichenkettenunterbrechungen und -verkettungen zu ersparen.
Verstehe nicht ganz, was Du meinst. Erklärst Du mir das mal?
dedlfix hat geahnt, dass Du das fragst und deswegen das hübsch aufbereitet zusammengefasst ;-)
das, was man nach mysql_query() *immer* tun sollte: eine Fehlerbehandlung durchführen. Nachschauen, was schiefgegangen ist und auf jeden Fall ins Anwendungsfehlerprotokoll schreiben.
Genau das mache ich auch. Aber ich werde nicht immer schlau daraus. Ich schreibe ins Fehlerprotokoll, bei welchem Seitenaufruf ein Fehler passiert ist. Leider fehlt mir dann aber die Query, bei der es passierte. Bisher ist es mir nicht gelungen, die Query an die Funktion zu übergeben, damit auch die eingetragen wird. Jeder Versuch endete damit, dass die Eintrag-Query einen Fehler verursachte, wenn sie die "Fehlerquery" einzutragen versucht hat.
Das hört sich danach an, dass Du Dein Fehlerprotokoll in der DB abspeicherst. Ich dachte an ein normales Protokoll in Textdateiform, dass auch dann zur Verfügung steht, wenn DB-Zugriffe gerade nicht möglich sind.
Auch so eine Geschichte. Ich mache das weitestgehend so, wie Du schreibst. Im Produktivbetrieb gebe ich keine mysql_error()-Fehlermeldungen, sondern nur eigene fehlermeldungen aus.
Leider habe ich noch keine gute Möglichkeit des schnellen Umschaltens zwischen Testbetrieb und Produktionsbetrieb gefunden (aber auch noch nicht wirklich danach gesucht).
im Testbetrieb die Ausgaben wirklich nur für Debug-Zwecke nutzen. Du solltest Dir ohnehin eine sinnvolle Fehlerbehandlungsstrategie überlegen und nicht - wie oft gesehen - einfach mit
or die(mysql_error());
das Skript sterben lassen. Überlege Dir, was Du an der betreffenden Stelle tun kannst. In vielen Fällen wirst Du dem Benutzer eine Trostnachricht ausgeben wollen. In manchen Fällen könnte es sinnvoll sein, nach einer gewissen Wartezeit das Statement erneut zu senden ...
Was heißt unique-Zufallswert? Wie sieht das aus? Kann es nicht sein, dass das UPDATE-Statement zufällig den gleichen Wert liefert?
Ich glaube, nicht.
Glauben heißt nicht wissen.
unique-Zufallswert heißt, dass ich eigens einen Wert bestimme, der ganz sicher ein anderer ist, als der bereits in der Spalte eingetragene.
Klar, ich könnte die von php mitgelieferte Unique-ID nehmen, aber ich hatte hierfür schon eine Funktion, nämlich microtime().
liefert einen deterministischen Wert, der durchaus mal gleich sein könnte :-) Wenn das Feld jedoch wirklich nur dazu dient, auf jeden Fall eine UPDATE-Operation zu erzwingen (und sonst keine Bedeutung hat), nähme ich
SET spezialspalte = NOT spezialspalte
für eine Spalte mit einem boolschen Wert und der Eigenschaft NOT NULL.
Woher soll ich wissen, dass Du das weißt? Es ist ein offensichtlicher Fehler, ein Fehler, den ich schon oft gesehen habe.
Ich bin Dir doch auch dankbar für den hinweis, aber es muss doch erlaubt sein, darauf hinzuweisen, dass man dieses Problem schon eliminiert hat?
Ich wollte Dir damit klarmachen, dass der potentielle Helfer nicht über *Dein* Wissen verfügt, sondern sich nur auf das beziehen kann, was in Deiner Fragestellung steht. In vielen Fällen ergänzt durch Erfahrungswerte, ja und manchmal auch durch Intuition, wir bezeichnen dies auch gern als "Glaskugel benutzen".
Deswegen ist es für beide Seiten gut, wenn der Fragesteller das Problem auf das richtige Maß reduziert und lieber etwas zu wenig als etwas zu viel kürzt. Und natürlich etwas zum Umfeld schreibt und das, was er bereits versucht hat - eben das, was in den Tipps für Fragende der Charta dieses Forums steht. Tipps für Antwortende gibt's übrigens auch. Ja, manchmal wünsche ich mir nach einer (nicht gerade gelungenen) Antwort, ich hätte diese beherzigt :-)
Steht schon auf meiner ToDo-Liste.
Zu Deiner Todo-Liste möchte ich noch etwas hinzufügen:
Für neue PHP-Skripte mit MySQL-Zugriff empfehle ich Dir die Verwendung der leistungsfähigeren und von MySQL empfohlenen mysqli-Erweiterung, siehe dazu auch die Feature-Vergleichstabelle am Ende der Handbuchseite Überblick über die mysqli-Erweiterung.
Freundliche Grüße
Vinzenz