OVH Cloud OVH Cloud

MySQL -> MySQLi

6 réponses
Avatar
Laurent Seguin
Salut !

Je me pose une petite question à propos les fonctions mysqli_* associées à
MySQL4.1 quand on a des scripts utilisant les fonction mysql_*.

Je m'explique avec un exemple bateau :
<?php

/* - On met ça dans un fichier - */
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);
}
/* ----------------------------- */


// Un script type
// ---------------
$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);
?>

Bien que cela fonctionne (je viens de tester), ce genre de chose est elle
envisageable si on migre le mysql4.0 vers un mysql4.1 sur un serveur et si
non, pourquoi ?

6 réponses

Avatar
loufoque
Laurent Seguin a dit le 07/11/2004 14:02:

Bien que cela fonctionne (je viens de tester), ce genre de chose est elle
envisageable si on migre le mysql4.0 vers un mysql4.1 sur un serveur et si
non, pourquoi ?


C'est envisageable, oui.
Après, est-ce que ça change vraiment les performances ?

Avatar
marc.quinton-PAS-DE-
Bien que cela fonctionne (je viens de tester), ce genre de chose est elle
envisageable si on migre le mysql4.0 vers un mysql4.1 sur un serveur et si
non, pourquoi ?


non :

<b>Fatal error</b>: Cannot redeclare mysql_connect() in ...

tu ne peux redéclarer cette fonction. Mais peut-etre qu'il existe
des mécanismes d'effacement de fonction suivi d'une redéclaration.

Avatar
loufoque
a dit le 08/11/2004 :
non :

<b>Fatal error</b>: Cannot redeclare mysql_connect() in ...

tu ne peux redéclarer cette fonction. Mais peut-etre qu'il existe
des mécanismes d'effacement de fonction suivi d'une redéclaration.


En fait j'avais cru comprendre qu'il voulait enlever MySQL pour mettre
MySQLi à la place (comme le laisse entendre le titre de son message,
"MySQL -> MySQLi".
Donc si la bibliothèque MySQL n'est plus chargée, il ne devrait plus y
avoir de problèmes.

Avatar
marc.quinton-PAS-DE-

<b>Fatal error</b>: Cannot redeclare mysql_connect() in ...

tu ne peux redéclarer cette fonction. Mais peut-etre qu'il existe
des mécanismes d'effacement de fonction suivi d'une redéclaration.


voici : http://fr.php.net/manual/en/function.override-function.php

Avatar
Laurent Seguin
loufoque , le 08 nov. 2004 13:13:36,
écrivait ceci:

<b>Fatal error</b>: Cannot redeclare mysql_connect() in ...

tu ne peux redéclarer cette fonction. Mais peut-etre qu'il existe
des mécanismes d'effacement de fonction suivi d'une redéclaration.


En fait j'avais cru comprendre qu'il voulait enlever MySQL pour mettre
MySQLi à la place (comme le laisse entendre le titre de son message,
"MySQL -> MySQLi".
Donc si la bibliothèque MySQL n'est plus chargée, il ne devrait plus y
avoir de problèmes.


Toutafé !
Surtout quand je dis : ça fonctionne (je viens de tester)
C'est que j'ai *vraiment* testé. :-)


Avatar
John GALLET
Salut Laurent,

Bien que cela fonctionne (je viens de tester), ce genre de chose est elle
envisageable si on migre le mysql4.0 vers un mysql4.1 sur un serveur et si
non, pourquoi ?


Tu peux effectivement faire ce genre de choses mais si tu as besoin, pour
une raison quelconque, de faire cohabiter les deux ensembles de fonctions,
il me sembe qu'un bon vieux find avec un sed sera aussi efficace.
Genre :
find . -name "*.php" -exec sed 's/mysql_/mysqli_/' {} ;

à la racine une COPIE de ton arborescence, suivit d'un diff -r pour voir
les différences, devrait le faire sans trop de mal.

Attention, non testé ;-)

Si c'est trop violent, tu peux faire autant de sed successifs que de
fonctions.

Pour moi c'est plus un problème de portabilité entre plateformes qu'autre
chose.

a++;
John