Valeur du Auto Increment dans MySQL

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Valeur du Auto Increment dans MySQL

    Bonjour,
    J'ai besoin dans la programmation de mon composant de me baser sur le 'Auto_increment'

    Voici la solution qui permet de savoir où en est le pointeur d'auto-incrementation géré par mysql pour un champ d'une table.

    En clair si vous avez ceci :
    1 MARTIN Georges
    2 DUPONT Daniel
    3 TONNOT Yoel

    En supprimant l'enregistrement 2, un insert vous donnera en auto-increment la valeur 4 à l'enregitrement suivant.
    La SEULE méthode connue pour y parvenir n'est donc pas l'utilisation d'un MAX mais de ceci (en php/mysql hors joomla) (car l'auto_increment est une valeur unique)
    1. $query = mysql_query(SHOW TABLE STATUS LIKE tablename);
    2. $row = mysql_fetch_array($query);
    3. $next_id = $row[‘Auto_increment’] ;
    Et via phpmyadmin ça marche !

    Par contre avec les méthodes Joomla style :
    $query = "SHOW TABLE STATUS LIKE tablename";
    $row = mysql_fetch_array($query);

    j'arrive pas à attaquer la valeur du champ Auto_increment...
    Rondediou comment feriez-vous ???

    En tous cas quoi qu'il en soit, retenez la méthode !
    Thanks
    MacLeod
    Dernière édition par MacLeod à 11/06/2007, 14h07

  • #2
    Salut MacLeod,

    C'est marrant, par ce que je m'étais posé la question dernièrement de savoir comment récupérer la prochaine valeur de l'auto-incrément d'une table. C'était de façon à pouvoir créer un enregistrement connexe (d'une table liée) avant celui de la table de contenu Joomla!.
    J'avoue que je n'avais pas trouvé de solution utilisable, mais en même temps j'ai changé d'idée, car au final j'ai préféré attendre qu'il soit attribué de façon certaine... Ca m'évitait d'avoir des enregistrements connexes orphelins (sans enregistrement dans la table des articles), si un problème survenait.

    Par contre, je suis intéressé par une solution sous Joomla si tu en as une à préconiser
    Mais par rapport à ton exemple, je ne comprends pas pourquoi cela ne fonctionne pas...
    ================================================== ======
    Quelques dizaines de minutes après avoir commencé le début du message, et surtout après avoir lancé une série de test, j'ai trouvé un moyen sous Joomla de retrouver cette information...

    Mais il semble qu'il y ait un petit souci avec le nom de la table qui n'est pas interprété par Joomla!
    Code PHP:
    global $database;
    $query "SHOW TABLE STATUS LIKE 'jos_content'";
    $database->setQuery($query);
    $row $database->loadObjectList();
    $next_id $row[0]->Auto_increment 
    Cet exemple ne fonctionne que si le suffixe de la table est passé directement... Il doit y avoir un moyen de le récupérer, mais là je n'ai pas trouvé.
    L'autre point, c'est le format bizarre qui est renvoyé, et que j'ai du imprimer (avec print_r) pour savoir ou se trouvait mon champ...
    Mais c'est déjà une solution

    En fait, c'est la méthode sélectionnée qui n'était pas la bonne :
    Code PHP:
    $database->loadObject($row);
    $next_id $row->Auto_increment 
    Dernière édition par Ccrosaz à 11/06/2007, 12h08
    Christophe
    Joomla newb but Joomla fan

    Commentaire


    • #3
      Envoyé par Ccrosaz Voir le message
      Salut MacLeod,

      En fait, c'est la méthode sélectionnée qui n'était pas la bonne :
      Code PHP:
      $database->loadObject($row);
      $next_id $row->Auto_increment 
      Rhaaaaaaaaa c'est ce que je faisais aussi et qui marchait pas...
      Je testes vite ton autre méthode !!!!

      ....

      Ca marche MAIS A CONDITION en effet que tu mettes bien le préfixe de ta table en dur...
      !!!!

      Bon alors... maintenant comment récupérer le préfixe des tables Joomla ??
      A mon avis il y a un petit bug côté Joomla quand même car ça me parait vraiment bidouille !!

      Merci de ton aide Ccrosaz en tous cas !
      Dernière édition par MacLeod à 11/06/2007, 12h19

      Commentaire


      • #4
        Si tu trouve une solution simple et 'propre', alors n'hésites pas à nous la proposer, et à passer ton poste en 'Astuce'
        Ainsi on pourra revenir dessus si on a besoin de cette technique
        Christophe
        Joomla newb but Joomla fan

        Commentaire


        • #5
          Bon, je viens de trouver...
          Il faut juste regarder la variable du configuration.php...

          $mosConfig_dbprefix = 'jos_';


          Sinon il y a encore mieux :

          En effet il n'y a que les nom des tables qui sont traduites automatiquement.
          Mais si on utilise les tables comme une valeur avec simple cote, le gestionnaire de base ne change rien :

          $query = 'SHOW TABLE STATUS LIKE \'' . $database->getPrefix() . 'nomdetable\'';

          Donc problème définitivement résolu !
          A+

          Commentaire


          • #6
            Salut,

            Pourquoi as tu besoin de cette valeur ? Car si c'est pour un insert tu n'en as pas besoin car il incremente automatiquement. Il suffit juste de mettre NULL comme valeur.
            Par contre, si c'est pour anticiper sur la valeur de la prochaine clé, pour un traitement quelconque, tu risques d'avoir un pb s'il y a plusieurs actions en même temps (utilisateurs simultanés) ....

            @+
            Thierry

            Commentaire


            • #7
              Oui oui je suis d'accord.. bien sûr.
              Cependant c'est dans un cas où je me base sur cet auto_incremental pour créer un répertoire unique... pas pour faire des inserts sql...
              En mode bdd relationel on est bien d'accord, il faut éviter !

              Commentaire

              Annonce

              Réduire
              1 sur 2 < >

              C'est [Réglé] et on n'en parle plus ?

              A quoi ça sert ?
              La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

              Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

              Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
              Comment ajouter la mention [Réglé] à votre discussion ?
              1 - Aller sur votre discussion et éditer votre premier message :


              2 - Cliquer sur la liste déroulante Préfixe.

              3 - Choisir le préfixe [Réglé].


              4 - Et voilà… votre discussion est désormais identifiée comme réglée.

              2 sur 2 < >

              Assistance au forum - Outil de publication d'infos de votre site

              Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

              Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

              Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

              UTILISER À VOS PROPRES RISQUES :
              L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

              Problèmes connus :
              FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

              Installation :

              1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

              Archive zip : https://github.com/AFUJ/FPA/zipball/master

              2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

              3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

              4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

              5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

              6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
              et remplacer www. votresite .com par votre nom de domaine


              Exemples:
              Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
              Télécharger le script fpa-fr.php dans: /public_html/
              Pour executer le script: http://www..com/fpa-fr.php

              Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
              Télécharger le script fpa-fr.php dans: /public_html/cms/
              Pour executer le script: http://www..com/cms/fpa-fr.php

              En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

              Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
              Voir plus
              Voir moins
              Travaille ...
              X