dedlfix: Performance MySQL updaten

Beitrag lesen

Tach!

Eigentlich, kommen die meisten Variablen aus der Datenbank und werden in php gesetzt und kommen nicht durch eine User Eingabe. Aber Anfangs wurde mir gesagt das ich alles ordnungsgemäß Escapen muss, also Escape ich auch einen Intenger.

Es kommt vielmehr darauf an, dass du nicht nur einfach so machst, was man dir sagt, sondern dass du verstehst, warum etwas so gemacht wird. Das ist in der Regel das Bestreben der meisten Teilnehmer hier, Kompetenz zu vermitteln und nicht nur einen Befehlsempfänger zu züchten.

Maskieren muss man, weil Code und Daten gemischt werden, und man dann genau kennzeichnen muss, was Daten sind. Und wenn dann Zeichen innerhalb der Daten vorkommen, die als Code interpretiert werden könnten, schreibt man die in einer besonderen Form, so dass genau das nicht passiert. Üblicherweise handelt es sich bei den zu maskierenden Zeichen um die Zeichen, die man als Begrenzer für die Daten verwendet, also meist Anführungszeichen. Wenn du keine solchen Start- und Ende-Zeichen um einen Wert stehen hast, dann hast du da nicht in den Datenmodus geschaltet, bei dem verhindert werden muss, das man ihn durch Datenbestandteile fälschlicherweise verlassen kann. Stattdessen bleibt man da im Code-Modus und muss anderweitig dafür sorgen, dass Datenliterale korrekt notiert werden, die nicht mit Begrenzungszeichen eingerahmt werden. Auch hilft es nicht, falsche Zeichen zu maskieren, weil möglicherweise die Maskierzeichen wörtlich genommen werden, oder in dem Kontext eine ganz andere Bedeutung haben.

Nein, aber mich ärgert es einfach immer wieder, wenn etwas kritisiert oder kommentiert wird was nicht ersichtlich ist bzw der Einfachheit gekürzt wurde. Aber wenn ihr lieber 2000 Zeilen PHP code möchtet, dann kann ich auch den Posten.

Nicht unbedingt, wenn du keine Revision dessen möchtest. Nur ist es so, dass man aus Weggelassenem nicht erkennt, dass das eigentlich doch da ist. Es wäre dann sinnvoll, wenn du das kenntlich machst, dass da was entfernt wurde. Sinnentstellende oder die eigentliche Struktur verändernde Kürzungen sind auch nicht hilfreich, um die eigentlichen Fehler im Code zu finden.

Bei einem simplen Select ist das manuelle schließen unnötig, das ist richtig. Wenn man jedoch in einem Script mehrmals die Datenbankverbindung aufbaut und autocommit gerade nicht auf true setzt dann ist das schließen mit commit() respektive rollback() notwendig.

Wie gesagt, nein. Du kannst den Transaktionsmodus mit dem Setzen des Autocommit-Modus auf true ebenfalls verlassen, ohne die Verbindung zu schließen. Du hast hier ein Performance-Problem, und da ist es nicht zuträglich unnötige Aktionen vorzunehmen. Es sieht in dem gekürzten Code jetzt nicht so aus, als ob du die Verbindung in der Schleife ständig öffnest und schließt. Man merkt die Verzögerung auch nicht im normalen Betrieb, weil das Öffnen eigentlich schnell geht. Aber ich hatte es mal, dass PHP und der Datenbankserver an jeweils anderen Ecken der Welt standen, und da merkt man deutlich die laufzeitbedingte Verzögerung. Jeder Funktionsaufruf (Verbinden, Kodierung setzen, Datenbank auswählen) musste da einmal um die Welt reisen. Insofern läppert sich auch ständiges unnötiges Schließen-Öffnen im lokalen Betrieb zu einer Größe zusammen.

Auch wenn es gut gemeint war, bei mir kommt nur an: "sprintf(%2$s %1$s %3$s %5$s %4$s, 'zulernen', 'viel', 'du', 'hast', 'noch') junger Padawan". Was ich auch weiß, und wenn es etwas gibt was ich nicht verstehe oder nicht weiß, weil ich es noch nicht gesehen oder gemacht habe, dann frage ich euch.

Ja, aber ich weiß nicht, was du schon alles weißt und was nicht. Ich sehe nur das Offensichtliche. Auch wenn ich dir vielleicht schon ein paar mal geantwortet habe, merke ich mir nicht unbedingt deinen Wissensstand, den du in vorherigen Postings gezeigt hast. Ärgern hilft dir nicht weiter. Du darfst dann auch einfach die nebensächlichen Punkte ignorieren.

Darum finde ich es immer besser erst einmal auf die Frage zu antworten und sich dann um mögliche schwächen und Fehler des Codes zu kümmern.

Ja, das ist auch mein Bestreben. Nur beschränkt sich das mitunter erstmal auf eine Rückfrage oder eine ganz allgemeine Antwort, weil das eigentliche Problem nicht klar wurde oder Fakten zum Verstehen fehlen. In einem solchen Fall alles andere unbeachtet zu lassen, und erst sehr viel später (Tage, Wochen, gar nicht - je nachdem, wie aktiv der Probleminhaber mitarbeitet) zu behandeln, ist auch nicht die Lösung.

So, genug der Erklärungsversuche dieser Art und meinerseits, das Fachliche werde ich an anderer Stelle fortsetzen.

dedlfix.