Passer de mysql à mysqli
Bonjour,
je suis débutant et j'ai récupéré l'administration d'un site développé par "je ne sais qui" en 2005 et qui n'a pas été maintenu...
Le site fonctionne mais j'ai un énorme temps de latence lors des accès à la base de données.
Je tente de passer à mysqli mais j'avoue être perdu.
voici le code original de connexion:
function connexion ()
{
global $g_config_file;
require ($g_config_file);
// Connexion au serveur
$connexion = mysql_pconnect ($serveur, $user, $password);
if (!$connexion) {
// echo "Désolé, connexion au serveur $serveur impossible pour utilisateur $user avec password $password \n";
echo "Désolé, connexion au serveur $serveur impossible.\n";
exit;
}
// Connexion à la base
if (!mysql_select_db ($base, $connexion)) {
echo "Désolé, accès à la base $pBase impossible\n";
echo "<B>Message de MySQL :</B> " . mysql_error($connexion);
exit;
}
// On renvoie la variable de connexion
return $connexion;
}
// ---------------------------------------------------------------------
// Retourne le résultat d'un SELECT dans une variable
// ---------------------------------------------------------------------
function query2var($vt_query)
{
$vq_query = mysql_query($vt_query);
$va_query = mysql_fetch_array ($vq_query);
$va_result = $va_query[0];
return $va_result;
}
// ---------------------------------------------------------------------
// Retourne le résultat d'un SELECT dans un tableau à 1 dimenssion
// ---------------------------------------------------------------------
function query2tab($vt_query)
{
$vq_query = mysql_query($vt_query);
$va_result = mysql_fetch_row($vq_query);
return $va_result;
}
function query2tab2($vt_query)
{
$vq_query = mysql_query($vt_query);
$i = 0;
while ($va_query = mysql_fetch_array($vq_query)) {
$va_result[$i] = $va_query[0];
$i++;
}
return $va_result;
}
// ---------------------------------------------------------------------
// Retourne le résultat d'un SELECT dans un tableau à n dimensions
// ---------------------------------------------------------------------
function query2tabn($vt_query)
{
$vq_query = mysql_query($vt_query);
$i = 0;
while ($va_query = mysql_fetch_array($vq_query)) {
$va_result[$i] = $va_query;
$i++;
}
return $va_result;
}
// ///////////////////////////
J'ai commencé à "corriger" par:
function connexion ()
{
global $g_config_file;
require ($g_config_file);
// Connexion au serveur
// 162 $connexion = mysql_pconnect ($serveur, $user, $password);
$connexion = mysqli_connect ($serveur, $user, $password, $base);
if (mysqli_connect_errno()) {
echo "Echec de la connexion: " . mysqli_connect_error();
exit();
}
// On renvoie la variable de connexion
return $connexion;
}
mais je ne suis sûr de rien, et quelles sont les bonnes syntaxes pour:
mysql_pconnect;
$vq_query = mysql_query($vt_query);
$va_query = mysql_fetch_array ($vq_query);
$va_result = mysql_fetch_row($vq_query);
Vous remerciant pour l'aide que vous pouvez m'accorder
Très cordialement
Réponses apportées à cette discussion
Salut,
la plupart des fonctions mysql_xxx existent en mysqli_xxx donc un simple Rechercher/Remplacer peut fonctionner pour l'essentiel du code. Il pourrait arriver que pour certaines fonctions très particulières ça ne fonctionne pas mais les cas ne seront pas nombreux et faciles à rattraper.
Il peut également arriver exceptionnellement que la nature et l'ordre des paramètres pour certaines fonctions varient entre mysql_ et mysqli_ mais ce serait à la marge sur une fonctoin ou deux.
Sinon, pour gagner aussi en performance, il serait également très utile d'inspecter la structure de la base de données et de vérifier les indexations de colonnes. Là, ce sera du cas par cas et il faudra mesure l'intérêt selon qu'il y a davantage d'écritures que de lectures ou l'inverse. Il faut en effet savoir que l'indexation d'une colonne va un peu ralentir l'écriture puisque ça implique le ré-écriture de tout l'index à chaque insertion/modification.
Attention toutefois aux versions de MySQL ainsi que des versions de PHP utilisées.
Dans tous les cas, il reste tout aussi important de s'appuyer sur la documentation qui est largement détaillée avec des exemples de code
Bonjour,
En fait le problème de latence est dû à la fonction "mail" de php (5.4), même en optimisant le code ça n'a rien changé et comme c'est un serveur mutualisé je n'ai pas accès au "php.ini", j'ai finalement utilisé la classe "PHPMailer" et plus de latence.
ceci ne m’empêche pas d'avoir à mettre à jour les accès Mysql.
merci pour ta réponse et ces informations
Pas de quoi,
Cette modification par rapport à la fonction mail est étonnante dans la mesure où il n'est en principe censé n'y avoir strictement aucun lien avec MySQL. Je ne vois donc pas le rapport entre les deux.
Ceci étant, il est vrai que sur ce point PHPMailer est très efficace.
Et si tout fonctionne maintenant correctement, alors c'est une bonne chose. Bon code, @+