MySQL depracated …

Il y a peu de développeurs à qui la question a échappé : le passage d’un serveur en PHP 7 entraine une cascade d’erreurs sur le pages, commençant en général par « MySQL depracated » ou « Fatal error: Uncaught Error: Call to undefined function mysql_query() in … »
Concrètement toutes les fonctions de connexion aux bases des données mysql_xxx() sont à modifier, pour tenter (entre autre) d’endiguer les vagues des piratages de bases liées aux failles de sécurité.
Si vous n’utilisiez pas le langage orienté objet (nommé du doux nom de « PDO »), les mises à jours liées à ce changement peuvent sembler barbares sur beaucoup de tutoriels…
En fait, il est inutile de changer : si vous avez l’habitude de programmer en PHP « classique » (autrement dit en mode dit « procédural »), ne changez rien, c’est inutile !
L’essentiel
En fait c’est très simple :
- tous les « mysql_ » sont remplacés par « mysqli_ »
- toutes les fonctions de connexion à la base demanderont désormais d’avoir le témoins de connexion ($db_link)
Tout d’abord : l’urgence…
Pas de panique. Si vous avez 5 minutes pour supprimer les erreurs, avant de reprendre le code, vous pouvez déjà commencer par masquer les messages d’erreur !
il vous suffit de rajouter une arobase (@) devant chaque fonction mysql, les messages d’erreurs disparaissent.
J’autorise les trolls puristes à se taire : ce n’est certainement pas la bonne méthode, mais pour dépanner dans l’urgence, cette méthode en vaut une autre !
// supprimer les messages d'erreur
$db_link = @mysql_connect( 'localhost', 'root', '');
Ouverture d’une connexion à la base
// Avant PHP 7
$db_link = mysql_connect ('IP_serveur', 'utilisateur_mysql', 'mot_de_passe') or die ('Je ne peux pas me connecter a la base parceque : ' . mysql_error());
mysql_select_db ('nom_de_la_base');
// Après PHP 7
$db_link = mysqli_connect('IP_serveur', 'utilisateur_mysql', 'mot_de_passe', 'nom_de_la_base');
if (mysqli_connect_errno()) { printf('Échec de la connexion : %sn', mysqli_connect_error()); exit; }
Fermeture d’une connexion à la base
// Avant PHP 7
mysql_close();
// Après PHP 7
mysqli_close($db_link);
Requête SELECT
// Avant PHP 7
$requete = "SELECT var1, var2 FROM table";
$result = mysql_query($requete) or die('Erreur SQL !<br />'.$requete.'<br />'.mysql_error());
// tableau des résultats d'extraction $data_tab['champ']
$data_tab = mysql_fetch_array($result);
// on libère la mémoire associée à un résultat
mysql_free_result($result);
// Après PHP 7
$requete = "SELECT * FROM table";
$result = mysqli_query ($db_link, $requete);
if(!$result) { printf("Message d'erreur : %sn", mysqli_error($db_link)); }
// tableau des résultats de l'extraction $data_tab['champ']
$data_tab = mysqli_fetch_assoc ($result);
// on libère la mémoire associée à un résultat
mysqli_free_result($result);
Requête INCLUDE
// Avant PHP 7
$requete = "INSERT INTO table (var1, var2) VALUES('$var1', '$var2') ";
$result = mysql_query($requete) or die('Erreur SQL !<br />'.$requete.'<br />'.mysql_error());
// Après PHP 7
$requete = "INSERT INTO table (var1, var2) VALUES('$var1', '$var2') ";
$result = mysqli_query ($db_link, $requete);
if(!$result) { printf("Message d'erreur : %sn", mysqli_error($db_link)); }
Requête UPDATE
// Avant PHP 7
$requete = "UPDATE table SET var1='$var1', var2='$var2' WHERE id='$_GET[id]'";
$result = mysql_query($requete) or die('Erreur SQL !<br />'.$requete.'<br />'.mysql_error());
// Après PHP 7
$requete = "UPDATE table SET var1='$var1', var2='$var2' WHERE id='$_GET[id]'";
$result=mysqli_query ($db_link, $requete);
if(!$result) { printf("Message d'erreur : %sn", mysqli_error($db_link)); }
Compter les lignes extraites
// Avant PHP 7
$requete = "SELECT * FROM table";
$result = mysql_query($requete) or die('Erreur SQL !<br />'.$requete.'<br />'.mysql_error());
$count = mysql_num_rows ($result);
mysql_free_result($result);
// Après PHP 7
$requete = "SELECT * FROM table";
$result = mysqli_query ($db_link, $requete) or die('Erreur SQL !<br />'.$requete.'<br />'.mysqli_error($db_link));
$count = mysqli_num_rows ($result);
mysqli_free_result($result);
Extraire le dernier ID inséré
// Avant PHP 7 (juste après une requête INSERT)
printf("Le dernier ID inséré dans est : %dn", mysql_insert_id());
// Après PHP 7 (juste après une requête INSERT)
printf("Le dernier ID inséré dans est : %dn", mysqli_insert_id ($link));
Avec ça, on couvre déjà 95% des modifications à faire …
Pour le reste, la Bible est ici : http://php.net/manual/fr/book.mysqli.php
No Responses to “MySQL depracated …”