IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Mysql_result obsolete, comment faire ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 40
    Points
    40
    Par défaut Mysql_result obsolete, comment faire ?
    Bonjour,

    J'ai sais que mysql_result deviendra bientôt obsolète et il faut donc que je remplace cette fonction par une autre en version php 5.5. Cela dit je ne sais pas du tout comment faire. Autant pour mysql_query c'etait facile mais pour cette fonction je ne vois pas du tout. J'aimerai rester en mode procédurale.

    Voici la partie du code concernée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $query = "SELECT * FROM $tbljeu"; 
    $result = mysqli_query($IdConn,$query); 
    $nb = mysqli_num_rows($result); 
     
    if ($nb > 0)
    {
    	$j=0;
    	while ($j<$nb)
    	{
    		$num=mysql_result($result,$j,"num");
    		$numasso=mysql_result($result,$j,$tabCat[$type]);
    		echo "<br>Pour obtenir le numéro $num , il faut le jouer avec le chiffre $numasso";
    		$j++;
    	}
    }
    J'aimerai bien entendu rester en mode procédural et remplacer ces deux lignes avec un code compatible php 5.5 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $num=mysql_result($result,$j,"num");
    $numasso=mysql_result($result,$j,$tabCat[$type]);
    Merci d'avance à celui ou celle qui pourra m'aider et (sans trop exagérer) me sauver la vie (ou plutôt la semaine !).

    Je reste disponible pour toute question.

    Bonne soirée à tous.

    EDIT : j'ai vu que le manuel PHP disait qu'il fallait utiliser : bool mysqli_data_seek ( mysqli_result $result , int $offset )
    pour avoir une equivalence avec mysql_result.
    Avez vous une idée de comment faire avec mon exemple ci-dessus s'il vous plait ?

    J'ai trouvé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function mysqli_result($res, $row, $field=0) {
        $res->data_seek($row);
        $datarow = $res->fetch_array();
        return $datarow[$field];
    }
    Est ce qu'en déclarant cette fonction dans mon code, il me suffira alors de remplacer tous les mysql_result par mysqli_result pour que tout fonctionne correctement ?

    Merci encore.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai sais que mysql_result deviendra bientôt obsolète
    En fait, elle est déjà obsolète depuis deux ans

    Est ce qu'en déclarant cette fonction dans mon code, il me suffira alors de remplacer tous les mysql_result par mysqli_result pour que tout fonctionne correctement ?
    Essaie
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    En fait je ne peux pas essayer sans etre sur à au moins 99% lol.
    C'est assez compliqué mais j'ai droit à une seule modif dans le code...

    C'est obsolète depuis 2 ans mais là j'ai appris que ca sera carrément inutilisable d'ici quelques mois... ce qui provoquera des tonnes d'erreurs sur mon site.

    Alors... penses tu que ca va marcher ?

    J'ai trouvé cette fonction de substitution sur le manuel php mais je ne suis pas sur de la traduction. Peux tu me dire si c'est bien ce que je pensais stp ?

    Voici le lien :
    http://php.net/manual/fr/class.mysqli-result.php#109782

    Merci encore

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Enfin ce n'est pas Cendrillon, les fonctions en disparaissent pas de ton serveur à minuit.
    Ca ne concerne qu'une mise à jour du serveur en PHP7 ; tu as encore 10 ans devant toi.

    Ton code est mal écrit déjà avec l'extension mysql, il serait dommage de faire une mise à niveau en gardant les problèmes.
    Tout simplement tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $query = "SELECT * FROM $tbljeu"; 
    $result = mysqli_query($IdConn,$query); 
    while ($row = mysqli_fetch_assoc($result)) {
            echo '<br/>Pour obtenir le numéro ' . $row['num']. ', il faut le jouer avec le chiffre ' . $row[$tabCat[$type]];
    }
    Concernant ta mise à jour, j'imagine mal que tu te lances dans un nouveau code que tu n'aurais jamais testé et pour lequel tu n'as qu'un seul essai.
    Si tu as oublié un point-virgule quelque part tout est foutu ?
    Si c'est vraiment le cas, tu es dans le film Saw, pas dans du développement.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    Merci pour ta réponse. Mais est ce que tu as bien compris toi aussi par rapport à la traduction du manuel php qu'il s'agit bien d'une fonction visant à remplacer mysql_result ?

    Je note l'amélioration de ton code mais pour te dire la vérité ce n'est pas la seule ligne de code écrite comme ca et il me sera plus simple de faire un bon "remplacer" dans mon éditeur de texte sur une centaine de fichiers plutot que tout réécrire avec mysql_fetch_assoc.

    Sinon oui je n'ai pas vraiment beaucoup d'essais car ce n'est pas vraiment mon site mais celui d'un ami. Je vais passer chez lui après sa journée de boulot pour accéder à son ftp et je n'ai que quelques minutes (une 20ene de minutes) avant qu'il ne parte 2 semaines en vacances. Je n'ai pas longtemps pour tester ca donc c'est pour cette raison que je voulais arriver chez lui avec une solution qui avait de fortes chances de fonctionner :-)

    10 ans tu dis ? Mais alors pourquoi OVH lui envoie des messages limite stressant pour lui dire que plus rien ne risque de fonctionner ? Tu me dis pour php 7 mais là OVH semble indiquer que seul php 5.5 sera pris en compte dans les mois à venir... cela ne voulait pas donc dire que mysql_result ne fonctionnera plus ?

    Merci encore je suis un peu perdu...

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Tu peux mettre le message précis d'OVH ?

    Sinon, si je débarque chez mon garagiste, et que je lui dis : "Salut, je vous confie ma bagnole, faut la réviser / rénover du genre changer le moteur, mais vous avez 20 minutes parce que je pars en vacances", il m'enverrra bouillir, et il aura bien raison... Alors fais pareil avec ton copain.
    Comment dit le proverbe déjà ? A l'impossible, nul n'est tenu !

    Sinon, oui, si tu as au moins du temps, le code en version locale de développpement, et les accès FTP une semaine, la librairie mysqli est une option satisfaisante.
    Une autre serait la librairie PDO... mais si tu veux changer le moins possible, va pour mysqli_
    Pour partir de codes qui fonctionnent, tu as des variantes sur cette page du manuel (variante orientée objet ou procédurale).
    Toujours si tu es pressé, prends la variante procédurale.
    Mais, dans tous les cas, ce ne sera pas un copier/coller au pif. Tu auras du code à modifier en profondeur sur toutes les pages, on parle d'accès à la base de données, là, pas d'un vague changement de couleur dans la CSS !

    Ceci dit, ça ne serait pas aussi compliqué si ton copain avait fait une fonction de connexion, qu'il convoquerait "toujours" pareil : tu n'aurais qu'à changer le contenu de la fonction. Fais-donc cela (une fonction) si ce n'est déjà fait.

    http://php.net/manual/fr/mysqli.prepare.php
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    L'API mysql (à laquelle appartient la fonction mysql_result) est obsolète à partir de PHP 5.5, qui est sortie en 2013, et sera supprimée dans une prochaine version (sans doute PHP 7)
    En pratique, tant que la version de PHP utilisée est une version inférieure à PHP 7, utiliser l'API mysql ne va pas empêcher le code de fonctionner, mais provoquer des messages du type "Warning: fonction obsolète" (ce qui n'est pas forcément chouette pour tes utilisateurs)

    M'est avis qu'actuellement ton application tourne sur une version antérieure à PHP 5.5 (genre 5.4) et qu'OVH va faire une montée de version forcée pour tous ses serveurs.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    Je n'ai pas le message d'OVH, il me l'a lu au téléphone. Ceci dit merci beaucoup pour ton aide, je vais utiliser cette alternative car il y a vraiment trop de fichiers à modifier et en très peu de temps malheureusement. J'ai bien aimé ton exemple avec le garagiste lol

    Merci également à toi Celira. Finalement vous aviez raison tous les deux, je n'ai pas vraiment à m'inquiéter pour le moment mais afin d'être rassuré je vais passer en mysqli. Ne sait on jamais !

    Je mets donc le post en résolu. Si la fonction de substitution mysqli ne fonctionne pas j'éditerai alors ce post pour le signaler. Si ce n'est pas fait d'ici demain c'est que la fonction fonctionne à merveille.

    Merci encore et très bonne journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6][impression]Comment faire des effets sur les polices ?
    Par le.dod dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 08/11/2002, 10h31
  2. comment faire evoluer ma base vers interbase6
    Par toure32 dans le forum InterBase
    Réponses: 5
    Dernier message: 23/10/2002, 10h59
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo