winelady
Themenersteller
Kauffrau
Content Halbgott (862 Beiträge)

mysql –> mysqli

am 15.02.2014, 11:00 Uhr eröffnete winelady folgenden Thread
PHP & MySQL    2886 mal gelesen    5 Antwort(en).

Hallo zusammen,

da unser Hoster mit baldiger Umstellung auf php 5.5.x droht, muß/will/soll/darf ich sämtliche sql-Abfragen etc. “modernisieren”.

Auf der Suche nach guten Codebeispielen, die auch ein nicht-Profi verstehen kann, bin ich bisher nicht auf wirklich hilfreiche Ergebnisse gestoßen.

Vielleicht kennt jemand von Euch eine gute, brauchbare und leicht verständliche Anleitung – möglichst mit vielen vorher-nachher-Beispielen, wie der Umbau vonstatten gehen muß?

Danke + Gruß
winelady


Weinvielfalt aus dem Weingut Fuchs
Fremdsprachensatz

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 15.02.2014, 13:42 Uhr schrieb joerg

Hallo Hildegard

Vernünftiger Hoster kann ich nur dazu sagen.

Mir stellt sich die Frage wie du vorgehen willst.

Erstmal eine Lösung schaffen die umsetzbar wäre.

Dann wäre zu klären ob du die Abfragen danach prozedural oder objektorientiert ablaufen lassen möchtest.

Wenn objektorientiert dann würde ich dir persönlich eher zu PDO raten.

Kurzfristige Lösung du baust dir die mysql Funktionen nach und bindest diese auch auf jeder Seite ein.

Diese PHP Funktionen könntest du dann verwenden um jetzt schon den Wechsel zu vollziehen.

Version überprüfen, eine mysql Funktion überprüfen oder gleich die Extension überprüfen.

de.php.net/manual/de/function.phpversion.php


de.php.net/manual/de/function.function-exists.php


de.php.net/manual/de/function.extension-loaded.php



Wenn du dann feststellst das du die Version verwendest oder das mysql nicht zur Verfügung stehst kannst du ja dir selbst die Funktionen erstellen die du verwendest.

Also ich gehe mal von diesem rein prozeduralen Fällen aus. Die Verbindung sollte der schlimmste Fall sein

#mysql
$link = mysql_connect("myhost","myuser","mypassw");
$db_selected = mysql_select_db("mybd", $link);
#mysqli
$link = mysqli_connect("myhost","myuser","mypassw","mybd");


So für diese Stelle müsstest du per PHP Version abfragen wie du das übergibst.

if (version_compare(phpversion(), \'5.5\', \'>\')) {
$link = mysql_connect("myhost","myuser","mypassw","mybd");
}
else{
$link = mysql_connect("myhost","myuser","mypassw");
$db_selected = mysql_select_db("mybd", $link);
}


Ist zwar nicht besonders schön man könnte weiter gehen aber belassen wir es mal bei prozedural.

if (!function_exists(\'mysql_connect\')){
function mysql_connect($server,$user,$passwort,$databank){
return mysqli_connect($server,$user,$passwort,$databank);
}
}


Die restlichen Funktionen sind meiner Meinung nach rein prozedural gesehen nur eben das i anhängen und fertig im Groben.

Das war jetzt rein ein Beispiel dafür was möglich wäre.

Schöner wäre das du die Zeit echt gleich verwendest um die Funktion auszutauschen. Nur zu welchen Stand willst du gehen?

Ich könnte dir 4 Klassen mal schicken zum Vergleich wie man auf die unterschiedlichen Weisen die mysql Abfragen aufbaut.
Im Prinzip sollten die dann zeigen welche Funktionen du wie austauschen müsstest.

Bis auf die PDO Klasse hatte ich die aber nie wirklich im praktischen Einsatz da es mir nur um das Konzept und Verständnis ging. Auch konnte ich damit vergleichen wie schnell die Abfragen waren.

Und da ich mittlerweile mir selbst überlege wie ich noch narrensicherer die mysql Abfragen gestalte aber den Code dazu noch nicht angefangen habe ist das echt alte Sichtweise. Zuviel prozeduraler Code noch den man viel komplexer noch gestalten könnte.

Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

winelady
Kauffrau
Content Halbgott (862 Beiträge)
am 15.02.2014, 14:59 Uhr schrieb winelady

Hallo Jörg,

danke für Deine sehr ausführliche Antwort. Vernünftig ist unser Hoster schon, aber ich habe jetzt mit der ganzen Umstellung ziemlich viel zu tun; vor allem der Shop muß auf die neuere Version – mitsamt allen Umbauten, Contribs und Anpassungen, die ich in den letzten Jahren gemacht habe. Glücklicherweise gibt es die meisten Bausteine bei OSC schon, aber eben nicht alle.

Ich werde teils prozedurale, teils objektorientierte Lösungen brauchen, je nachdem, wie sie vorher schon da waren, denn ich will und kann nicht für alles das Rad neu erfinden.

Auf der php.net-Seite habe ich mich schon gründlich umgesehen, aber leider gibt es dort keine Anleitungen, welchen mysql-Befehl man mit welchem mysqli-Befehl direkt ersetzen kann. Die Syntax weicht außerdem ab – nur das "i" dazuschreiben, reicht also leider in vielen Fällen nicht.

Das Öffnen der DB kriege ich hin, auch das Auslesen daraus für Preise etc. auf den Infoseiten klappt. Schwieriger wird es mit älteren Klassen, die spezielle Funktionen definieren, eine davon mit über 2000 Zeilen Code. Ab php 5.5. liefern sie für jede einzelne der mysql-Funktionen eine "is deprecated"-Meldung. Daher meine Suche nach einer Vergleichstabelle o.ä., an der ich mich entlanghangeln kann.

Gruß
winelady


Weinvielfalt aus dem Weingut Fuchs
Fremdsprachensatz

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 15.02.2014, 16:45 Uhr schrieb joerg

Hallo Hildegard

Also diese is_deprecated Meldungen müsste man abstellen können durch folgende Angabe für die Ausgabe. Würde ich dann nach Erledigung dann auch wieder zurückstellen.

error_reporting(E_ALL ^ E_DEPRECATED);

Zumindest gewinnt man dadurch dann Zeit. Bisher dachte ich mysql wäre schon komplett raus aus PHP 5.5 aber selbst in PHP5.6 scheint das noch drin zu sein.
Okay dann ist mein Beitrag davor vielleicht für die Zukunft mal gut.

Ich hätte ja selbst bei einer Domain von sechs das Problem da ich da noch teilweise mysql Funktionen habe die ich noch nicht ausgetauscht habe.

In den Fällen wo es nicht reicht das i dazu zu schreiben frage doch einfach nach.

Vergleichstabelle ist mir echt nicht bekannt das ich sowas schon mal gesehen habe.

So ganz verstehen tue ich zwar jetzt nicht was du mit mysql Abfragen als OOP ansiehst weil das rein prozedurale Funktionen sind.

Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

winelady
Kauffrau
Content Halbgott (862 Beiträge)
am 15.02.2014, 17:29 Uhr schrieb winelady

Hallo Jörg,

ja, man kann die Fehlermeldungen einfach unterdrücken, und mysql wird in php 5.5.x noch ausgeführt – aber das löst das Problem ja letztlich nicht. Vielleicht werde ich diese Möglichkeit ein Weilchen nutzen (müssen), aber damit packt man sich nur ständig die error_logs voll.

Die meisten mysqli scheinen zusätzlich zum i noch als 2. Parameter den Bezug auf die DB-Verbindung zu brauchen, z.T. in anderer Reihenfolge als bei mysql. Die Programmierer der Welt sollen ja in Brot und Arbeit bleiben.

Gruß
winelady


Weinvielfalt aus dem Weingut Fuchs
Fremdsprachensatz

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 15.02.2014, 18:16 Uhr schrieb joerg

Hallo Hildegard

Sieh es positiv dann bekommst du durch die Error Logs eine Priorität der Seiten die du zuerst anpacken müsstest.

Wenn das jetzt nur der eine Paramter ist sollte das doch kein Thema sein.
Könnte man gut mit regulären Ausdrücken austauschen.

Du abgesehen von den Altlasten bin ich bereits schon länger sauber und ich denke die meisten professionellen Projekt stehen bereits schon länger bei mysqli zumindest alleine durch die Performance bei den Abfragen.

Da werden eher die Leute von überrascht werden die nicht in die Zukunft planen und solche Änderungen bereits im Vorfeld erledigen.

Und wenn mysql komplett aus PHP entfernt wurde bin ich gespannt darauf wieviele Seiten mit mysql Syntax da noch exisitieren wo dir dieser überalterte Code entgegenspringt so als Anregung wie man mysql Abfragen durchführt.

Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

  • 1


« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5275 Themen und 36110 Beiträge.
Insgesamt sind 48360 Mitglieder registriert.