dedlfix: Performance MySQL updaten

Beitrag lesen

Tach!

Wenn du das Statement selbst zusammenbauen möchtest, dann kannst du mysqli_query() statt mysqli_prepare() und mysqli_stmt_execute() nehmen. Das ist kürzer und spart einen Roundtrip zwischen PHP und MySQL. Dann solltest du aber auch das mit dem Maskieren richtig machen. Ein Tabellenname ist kein Wert, sondern ein Identifier. Für Identifier gelten andere Maskierungsregeln als die Funktion mysqli_real_escape_string() berücksichtigt. Üblicherweise stehen Identifier direkt im Statement und werden nicht bei Bedarf hinzugefügt. Vermutlich gibt es deshalb keine vorgefertigte Funktion, mit der man das erledigen könnte.

Tja, dann ist das halt so.

Wenn es keine Funktion gibt, heißt das nicht, dass du die Regeln, die für einen ordnungsgemäßen Identifier gelten, ignorieren darfst. Du musst dir dann eben selbst eine Funktion schreiben, wenn es nicht mit einem simplen str_replace() oder ähnlichem geht. Die eigentliche Frage ist aber: Hast du denn hier die Notwendigkeit, einen Identifier aus einer Variable hinzufügen zu müssen, deren Inhalt potentiell Sonderzeichen enthalten kann - in dem Fall Backticks, die als Begrenzer für Identifier definiert sind? Es wäre in einem solchen Fall auch sinnvoll, die Backticks im Statement nicht zu vergessen.

Außerdem fehlt dir zu dem Prepare das Execute. Das Commit ist kein Ersatz und auch nur für Transactions sinnvoll.

Ganz vielleicht nutze ich ja Transactions in der db_connect_function, wer weiß. Und vielleicht wurde das Execute einfach unbeabsichtigt mit gelöscht bei dem simplifizieren des Scripts.

Vielleicht, wer weiß. Ist das aber ein Schuh, den ich mir anziehen muss?

Und die Verbindung selbst zu schließen ist auch nur selten notwendig.

Bei Transactions zwingend notwendig.

Ich arbeite nicht mit Transactions, aber das halte ich doch für ein Gerücht. Dazu konnte ich bei meiner kurzen Recherche nichts finden. Wenn es nur darum geht, aus dem Transaktionsmodus wieder rauszukommen, dann kann man auch mysqli_autocommit(true) aufrufen.

Besonders dann nicht, wenn man weitere Statements ausführen möchte und sie dazu wiederherstellen muss.

Vielleicht ist das gerade ein zwischen Schritt den ich eingebaut habe um zu sehen wie lange welcher Teil braucht und anderen Scripten zwischendurch die Möglichkeit zu geben mit der Datenbank zu interagieren.

Vielleicht. Vielleicht verliere ich aber auch grad die Lust aufgrund dieser schnippischen Antworten auf das eigentliche Problem einzugehen.

dedlfix.