Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann ich alle mysql_-Funktionen blind durch mysqli_ ersetzen?

Die kurze Antwort ist nein , die Funktionen sind nicht gleichwertig.

Die gute Nachricht ist, dass es ein Konvertierungstool gibt, das Ihnen hilft, wenn Sie viele Anrufe/Projekte ändern müssen. Dadurch können Ihre Skripte sofort funktionieren.

https://github.com/philip/MySQLConverterTool

Es ist eine gegabelte Version der Originalversion von Oracle und koscher.

Das heißt, es ist nicht allzu schwierig, Ihren Code zu aktualisieren, und Sie möchten vielleicht sowieso zu einer objektorientierten Methodik migrieren ...

1) Die Verbindung

Sie benötigen praktisch eine neue Verbindungsfunktion, die die Verbindung als PHP-Variable speichert, zum Beispiel;

$mysqli = new mysqli($host, $username, $password, $database);

Beachten Sie, dass ich die Verbindung in $mysqli gespeichert habe . Sie können in $db speichern oder was auch immer Sie möchten, aber Sie sollten dies in Ihrem gesamten Code verwenden, um auf die Verbindung zu verweisen.

Denken Sie daran, die Fehlerberichterstattung für mysqli zu aktivieren, bevor Sie die Verbindung öffnen;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) Die Abfrage

Hinweis:Sie sollten sich mit vorbereiteten Anweisungen, die in MySQLi verfügbar sind, vor SQL-Injection schützen. Sehen Sie sich Wie kann ich SQL-Injection in PHP verhindern? an , aber ich werde hier nur die Grundlagen behandeln.

Sie müssen jetzt die Verbindung als Argument in Ihre Abfrage aufnehmen, und andere mysqli_ Funktionen. In prozeduralem Code ist es das erste Argument, in OO schreibt man es wie eine Klassenmethode.

Verfahrenstechnisch:

$result = mysqli_query($mysqli, $sql);

OO:

$result = $mysqli->query($sql);

3) Ergebnis abrufen

Das Abrufen des Ergebnisses ähnelt dem alten mysql_ Funktion in prozedural;

while ($row = mysqli_fetch_assoc($result))

sondern als $result jetzt ein Objekt in mysqli ist, können Sie den Objektfunktionsaufruf;

verwenden
while ($row = $result->fetch_assoc())

4) Verbindung schließen

Sie müssen also wie zuvor die Verbindung in die Schließfunktion aufnehmen; als Argument im Verfahren;

mysqli_close($mysqli);

und als das Objekt, auf dem Sie die Funktion in OO ausführen;

$mysqli->close();

Ich wäre für immer hier, wenn ich sie alle durchgehen würde, aber Sie verstehen schon. Sehen Sie sich die Dokumentation an für mehr Informationen. Vergessen Sie nicht, alle Funktionen zum Schließen von Verbindungen, Ergebnisfreigaben oder Fehler- und Zeilenzählfunktionen, die Sie haben, umzuwandeln.

Die grundlegende Faustregel lautet für Funktionen, die die Datenbankverbindung verwenden, dass Sie sie jetzt in die Funktion aufnehmen müssen (entweder als erstes Argument in prozedural oder als Objekt, das Sie zum Aufrufen der Funktion in OO verwenden) oder für eine Ergebnismenge Sie können die Funktion einfach in mysqli_ ändern oder verwenden Sie die Ergebnismenge als Objekt.