[PHP] mysql durch mysqli ersetzten Workaround

Roin

Freier Denker
Registriert
22 Juli 2013
Beiträge
581
Hallo Leute,

eben habe ich auf einer Seite meiner Projekte die Information bekommen, dass in geraumer Zeit mysql und dessen Funktionen aus PHP entfernt werden.
Nun habe ich allerdings einige Projekte mit zusammen über 100.000 Zeilen Code, in denen auch SEHR VIEL mysql -Funktionen (statisch) genutzt werden.

Nun wird ja darauf hingewiesen, dass man lieber mysqli oder PDO nutzen sollte, wobei ich dann eher zu mysqli tendiere.

Und jetzt meine eigentliche Frage:

Gibt es ein Workaround, welches die alten mysql-Funktionen so umgestaltet, dass diese mit mysqli laufen, ohne dass man wirklich jede Abfrage und Co. anpassen muss?

Ich würde gerne meinen bisherigen Code bestehen lassen und vielleicht irgendwie die bestehenden mysql-Funktionen (mysql_select und Co.) überschreiben, sodass diese alle Daten mittels mysqli abfragen.

Gibt es da bereits irgendwo etwas oder kann mir jemand bei der Programmierung helfen?


Ich habe immer peinlich genau darauf geachtet, dass ich mysql-Injections verhindere und nun soll einem das ja abgenommen werden und die einfachen Funktionen fallen weg -.-*

Ich hatte mir sowas in der Richtung vorgestellt
[src=php]//Pseudocode
function mysql_query($query) {
$teilabfrage = splitteQueryInAbfrageUndNutzereingaben($query);
mysqli - Prepared Statement gedöns

return mysqli-Daten als Ressource verarbeitet.

}[/src]
 
Entweder alles umstellen oder einfach bei der letzten Stable bleiben wo noch mysql ohne "i" unterstützt wird.

Wobei ich prepared Statements jetzt nicht so tragisch fand von der Einarbeitung, ~3 Stunden da war der Fall gehalten. Ist ja auch alles in allem sehr sinnvoll.

Generell:
Was hast du für seltsamen Code das eine Umstellung so tragisch wäre?
 
  • Thread Starter Thread Starter
  • #3

Bei der letzten stable bleiben klappt leider nicht, da viele meiner Projekte auf Webspace liegt, der nicht auf eigenen Servern läuft und somit vom Hoster umgestellt wird.

Die Einarbeitung ist nicht das Problem. Das Problem ist nur, dass ich WAHNSINNIG viele mysql_-Funktionen verwendet habe und das entsprechende Umschreiben mehr als ein paar Stunden dauern würde. Das würde mehrere Wochen dauern, bis ich jeden einzelnen Aufruf angepasst hätte... Die Projekte wollte ich aber nicht mehr weiterentwickeln (bei neuen verwende ich bereits mysqli), dennoch laufen die einfach so weiter. Ein Beispiel ist eine Stundenerfassung (Zeiterfassung, wann welcher Mitarbeiter auf welcher Baustelle war) für eine kleine Zimmerei.
Die Abfragen werden derzeit noch ziemlich kompliziert zusammengesetzt und das alles umzuschreiben ist doch ziemlich aufwendig...
 
Hoster anschreiben?

Also früher haben selbst freehoster ewig PHP4 unterstützt.
Falls deiner das nicht macht solltest du vielleicht einen Wechsel in Erwägung ziehen.
 
Eigentlich reicht es im ganzen Code [src=php]mysql_[/src] durch [src=php]mysqli_[/src]zu ersetzen und [src=php]("SELECT[/src]... zu[src=php] ($Link, "SELECT[/src]... usw. für INSERT, DELETE zu ersetzen. Wobei $Link Der DB-Handler zur Datenbankverbindung ist den du bei mysqli_connect() zurück bekommst
 
  • Thread Starter Thread Starter
  • #6

Das muss ich mal die Tage ausprobieren... Habe ich bisher nie drauf geachtet...


Die Hosterwahl liegt nicht immer in meiner Wahl, da halt auch viele Scripte von mir von einigen Kunden verwendet werden, die meine Scripte lediglich in eine bestehende Webseite integrieren.
 
Es wurde ja bereits angesprochen, dass du einfach mysqli_query statt mysql_query nutzen kannst. Es sei an dieser Stelle aber angemerkt, dass du in dem Moment selbstverständlich keine Prepared Statements nutzt. Eine Maskierung mit mysqli_escape_string und intval bietet in den meisten Fällen Abhilfe, kann aber bei falscher Anwendung zu weiteren Sicherheitslücken führen (bspw. Zeichensatzprobleme, Stringverarbeitung nach Maskierung, mysqli_escape_string für Integer, ...). Aber das nur als Anmerkung am Rande. Wie gesagt: Um den Code umzustellen, reicht es, das mysqli-Äquivalent von mysql zu nutzen, was sich in den meisten Fällen durch stupides Ersetzen in allen Dokumenten ändern lässt.
 
Für mich sieht es ein wenig danach aus, als sei deine Abstraktion zum Storage nicht hinreichend. Wenn du tatsächlich an diversen Stellen den Code umarbeiten musst, dann ist dein Code nicht sonderlich gut geschrieben. Je nach Größe und Anzahl der Projekte, solltest du dich ggf. darauf einstellen, neuere Versionen zu entwickeln.
 
  • Thread Starter Thread Starter
  • #10

Ich hatte mir bei einigen Projekten überlegt, eine eigene Klasse zu schreiben, in der dann alle Funktionen enthalten sind, die dann die entsprechenden Daten eintragen/abrufen, allerdings hatte ich das erst gegen Ende in Betracht gezogen und noch nicht umgesetzt...

Werde ich bei meinen kommenden Projekten auf jedenfall immer machen.
 
Wie 'alt' sind denn deine älteren Projekte eigentlich?
Außer mysql / mysqli hat sich unter PHP in den letzten Jahren ja doch einiges getan.
 
  • Thread Starter Thread Starter
  • #12
Wie 'alt' sind denn deine älteren Projekte eigentlich?
Einige sind 5+ Jahre alt, andere nur 2.
Ich habe allerdings bei den wichtigeren Änderungen Anpassungen vorgenommen, die allerdings meistens nicht sonderlich gravierend waren, da viele meiner Projekte mit einfachen Standardfunktionen auskommen. Lediglich die Datenbank-Arbeit ist etwas komplexer...
 
Zurück
Oben