PHP stopt de ondersteuning van verouderde MySQL functies, ook wel ext/mysql
genoemd. Overstappen van ext/mysql naar MySQLi – of PDO – is nu belangrijk als je jouw website wilt laten functioneren met nieuwe PHP-versies. Maar, weet jij of je ext/mysql gebruikt? En hoe converteer je PHP-code van mysql_connect()
naar mysqli_connect()
?
Waarom moet ik ext/MySQL converteren naar MySQLi?
Het omzetten van oude ext/mysql functies naar MySQLi is belangrijk voor de upgrade naar PHP 7. PHP 7 kent namelijk de verouderde ext/mysql functies niet meer, en dan toont jouw website een foutmelding:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in [bestand]
Of WordPress roept:
Your PHP installation appears to be missing the MySQL extension which is required by WordPress.
In het Nederlands is dat: Het lijkt erop dat je PHP-installatie geen MySQL-extensie heeft en die is noodzakelijk om WordPress te kunnen gebruiken.
Maar: vaak ben je er zelf niet eens van op de hoogte dat je verouderde technieken op jouw website gebruikt. Als ik je zeg dat het om functies zoals mysql_connect()
, mysql_select_db()
en mysql_query()
gaat, dan zegt dat je vast meer. Dat moet omgebouwd worden naar de MySQLi equivalenten, om ervoor te zorgen dat je website blijft functioneren.
De i staat voor Improved; de MySQLi extensie is een verbeterde versie van de ext/mysql
extensie.
In mijn Saotn.org-artikel Migrate PHP ext/mysql to MySQLi worden ext/mysql functies geconverteerd naar MySQLi. Stapsgewijs én eenvoudig.
Als je geen PHP MySQL class gebruikt
“Als mijn website geen MySQL class gebruikt, is het artikel dan nog steeds bruikbaar?“
Stel dat je geen PHP class gebruikt voor de verbinding met jouw MySQL database, maar dat je in ieder PHP-script dezelfde stukjes PHP-code herhaalt. Dan is het artikel nog steeds heel goed bruikbaar. Je moet alleen de relevante onderdelen eruit halen, en de betreffende PHP-code op meer plekken aanpassen.
Als in jouw PHP-scripts, in vrijwel ieder bestand, steeds het volgende naar voren komt:
<?php
$conn = mysql_connect("db-host","user","pass");
$db = mysql_select_db("db-name", $conn);
$result = mysql_query("SELECT * FROM `table`");
// ...
?>
Dan moet dit in iedere PHP-script aangepast worden naar:
<?php
$conn = mysqli_connect("db-host","user","pass","db-name")
$result = mysqli_query($conn, "SELECT * FROM `table`");
// ...
?>
Dat is nog wel te doen, toch? Als je dan toch bezig bent, bouw het gelijk om naar een PHP MySQLi class.
MySQLi equivalenten voor ext/mysql
Het ombouwen van ext/mysql
naar MySQLi extensie is best straightforward. Je moet alleen rekening houden met dat MySQLi – waar nodig – het connectie-object éérst wil, waar dat in ext/mysql
vaak de tweede parameter was.
Je vindt hier een overzichtje met meestgebruikte MySQLi equivalenten van ext/mysql:
- mysql_connect: mysqli_connect
- mysql_select_db: – (wordt meegegeven in mysqli_connect)
- mysql_query: mysqli_query
- mysql_num_rows: mysqli_num_rows
- mysql_fetch_assoc: mysqli_fetch_assoc
- mysql_fetch_row: mysqli_fetch_row
- mysql_fetch_array: mysqli_fetch_array
- mysql_affected_rows: mysqli_affected_rows
- mysql_insert_id: mysqli_insert_id
- mysql_free_result: mysqli_free_result
- mysql_get_server_info: mysqli_get_server_info
- mysql_close: mysqli_close
- mysql_real_escape_string: mysqli_real_escape_string
En MySQLi in WordPress?
En voor WordPress?
, vraag je je wellicht af. WordPress biedt vanaf versie 3.9 ondersteuning op MySQLi. Sinds WordPress 4.4 is WordPress compatible met PHP 7.
Bedankt :)
Heel graag gedaan :)