PHP : de MySQL à MySQLi - L©S ßlog - CyberSDF

L©S ßlog - CyberSDF



PHP : de MySQL à MySQLi

Le samedi 2 avril 2005 à 12:22:: Laurent - CyberSDF:: Dev Web

Il y a quelques temps, je devais migrer quelques sites qui avaient été écrit pour fonctionner avec le SGBD/R MySQL4.0 sur une machine ne disposant que de MySQL4.1, seulement cela entraîne quelques complications.

Comme vous le savez (si vous ne le savez pas, je vais vous l'apprendre) les fonctions PHP permettant d'accéder a cette base de données ne sont pas les mêmes en suivant la version.

  • Fonctions mysql_* pour le SGBD/R MySQL 4.0
  • Fonctions mysqli_* pour le SGBD/R MySQL 4.1

Si seulement il n'y avait que le i qui changeait, la migration serait simple, un simple rechercher/remplacer dans tous les fichiers et pouf on en parle plus. Mais ce n'est pas aussi simple que cela ; En effet, les paramètres se sont pas toujours dans le même ordre.
J'entends déjà certains dire si les sites avaient été développés en objet ça aurait été simple, une classe à ré écrire et zoup, oui mais la on y peu rien et les sites ont été développés en procédural[1].

Il est bien évidement inconcevable de reprendre tous les sites un par un et les corriger à la main, donc que faire ?
J'ai donc pensé à mettre dans un fichier qui sera inclus, ça :

<?php
  function mysql_connect($host,$user,$pass) {
   return mysqli_connect($host,$user,$pass);
 }
 function mysql_select_db($db,$cnx) {
  return mysqli_select_db($cnx,$db);
 }
 function mysql_query($sql,$cnx) {
  return mysqli_query($cnx,$sql);
 }
 function mysql_fetch_array($result) {
  return mysqli_fetch_array($result);
 }
 function mysql_free_result($result) {
  mysqli_free_result($result);
 }
 etc.
 ?>

Ainsi le script bateau du genre :

<?php
   $cnx = mysql_connect("localhost", "user", "pass") or
       die("Impossible de se connecter :  " . mysql_error());
   mysql_select_db("test",$cnx);
   $result = mysql_query("SELECT id, name FROM toto",$cnx);
   while ($row = mysql_fetch_array($result)) {
       echo "<p>$row\[id\] => $row\[name\]</p>";
   }
   mysql_free_result($result);
 ?>

fonctionnera toujours.

Ce n'est bien sur pas super idéal, mais cela fonctionne plutôt correctement et les performances du serveur ne s'en voient pas imputées.

Notes

[1] programmation à l'aide de procédures et fonctions appelées dans un ordre séquentiel

Blogmark it ! :: trackback fermés :: fil rss des commentaires

Aucun trackback.

Commentaire(s)

1. Le jeudi 10 mai 2007 à 02:17 :: Cakeby

Ca ne fonctionne pas pour ma part. Cela me fait une erreur disant qu'il est impossible de redéfinir ces fonctions.

2. Le jeudi 12 juillet 2007 à 16:32 :: LupusMichaelis

Pour éviter l'erreur que décrit Cakeby, il faut désactiver l'extension mysql_.

Les commentaires sont fermés.

Toutes les fautes d'orthographes présentes sur ce site sont protégées par la licence Logo Creative common Creative common

 |  Valid XHTML  |  Valid CSS  |  Dotclear  |  Design décliné de [ON]Simple par [ NikO ]
Hébergé par Typhon.Network