Comment stocker un array dans une BDD SQL ?

Discussion dans 'Web, design' créé par Carambar, 16 Février 2005.

Statut de la discussion:
Fermée.
  1. Offline
    Carambar He once forgot how to cry
    Suite à ce post ci , je me demandais qu'elle serais la manière plus éfficace d'enregister un array dans une BDD SQL.

    J'ai considéré plusieurs approches :

    1 - Enregistrer les binds un à un dans des enregistrements séparés. Un peu fastidieux.
    2 - Enregistrer l'array dans un champ texte. Solution rapide, mais il faudrais extraire de nouveau les données par la suite.

    Le but du script au final c'est de pouvoir extraire des informations d'un fichier ini, l'enregistrer sous un nom dans une BDD, d'avoir la possibilité d'afficher ca dans un form pour pouvoir faire des modifications et de sortir le fichier ini complet si besoin en est.
    Carambar, 16 Février 2005
    #1
  2. Offline
    j0k3r_n0ir ex membre
    Tres simple, il faut que tu sérialize ton tableau.
    Une fois sérializé, tu obtient une chaine de caractere plus ou moins longue selon la taille de ton tableau et tu peux donc la mettre dans un champ de ta base de donnée.

    Ensuite pour récupérer ton joli tableau, tu fais l'inverse, tu dé-sérialize le tout et tu aura ton tableau.

    C'est le même principe qui est souvent utiliser pour faire un sondage.

    Liens utiles :
    > http://www.nexen.net/docs/php/annotee/function.serialize.php
    > http://www.nexen.net/docs/php/annotee/function.unserialize.php
    j0k3r_n0ir, 16 Février 2005
    #2
  3. Offline
    Carambar He once forgot how to cry
    Merci beaucoup ! C'est chouette d'avoir des gens qui savent bien exploiter un langage :p.
    Carambar, 16 Février 2005
    #3
  4. Offline
    j0k3r_n0ir ex membre
    [Mode lol ON]
    En même temps heureusement, sinon les gens qui ne le connaissent pas beaucoup ferai comment pour avancer ?

    Ben il devrai se faire chier a chercher tout seul, et en même temps quand on chercher par soi-même on apprends plus vite ... ouais en fait ma question elle est a chier :cool:
    [Mode lol OFF]

    De rien :)
    j0k3r_n0ir, 16 Février 2005
    #4
  5. Offline
    Carambar He once forgot how to cry
    C'est vrai, mais parfois on s'amuses à réinventer la roue des fois alors qu'il une solution 10x plus simple :p .
    Carambar, 16 Février 2005
    #5
  6. Offline
    j0k3r_n0ir ex membre
    Personnellement je ré-invente souvent la roue pour voir le fonctionnement. Et je peux te dire que tu en apprends énormément en ré-inventant la roue, plutot que de banalement utilisé quelques choses de déjà fait.

    Bon faut avoir le temps de ré-inventer la roue aussi :p
    j0k3r_n0ir, 16 Février 2005
    #6
  7. Offline
    zoheir cvm.mangaleet()
    c'est possible de stocker l'array en tant qu'objet dans la bdd ?
    zoheir, 16 Février 2005
    #7
  8. Offline
    Bingo Beer Addict
    Je pense que tu devrais stocker chaque élément dans un champs. Je ne vois pas ce que cela a de fastidieux : tu parcours ton array et à chaque itération tu exécutes un INSERT.

    de i = bas_de_mon_tableau à haut_de_mon_tableau
    execute_sql : insert mon_tableau(i) into ma_table
    suivant

    L'algo fait 3 lignes. Je ne connais pas spécialement le PHP, mais ça devrait pas faire plus que ça ;)
    Bingo, 16 Février 2005
    #8
  9. Offline
    j0k3r_n0ir ex membre
    La solution du serialize marche très bien :)

    Pourquoi faire ?
    j0k3r_n0ir, 17 Février 2005
    #9
  10. Offline
    Bingo Beer Addict
    Si le but est de stocker le contenu d'un fichier .ini dans ta db, pourquoi n'utilises tu pas simplement "load data infile" ?
    En une instruction sql tu stockes ton fichier dans une table.
    Bingo, 17 Février 2005
    #10
  11. Offline
    null ose();
    Perso j'aurais dit comme j0k3r mais avec implode() et explode() mais la sérialisation est mieux pour là
    null, 17 Février 2005
    #11
  12. Offline
    Bingo Beer Addict
    Je n'ai rien contre la sérialisation, mais je ne vois pas vraiment l'intérêt ?
    Si c'est pour de toutes façons devoir sérialiser / desérialiser à chaque utilisation de ce fichier ini, autant avoir chaque ligne dans un champ. Ca permet notemment de faire des recherches indexées sur le champ. Ca n'est pas possible si tu sérialises.
    Bingo, 17 Février 2005
    #12
  13. Offline
    guslinux Gamerz'ien
    pour pas devoir le recréer à chaque page :D

    j'avais pas encore vu la fonction sérialize ... je sent que je v l'utiliser souvent !
    guslinux, 17 Février 2005
    #13
  14. Offline
    j0k3r_n0ir ex membre
    ... oO
    J'pas compris là ... tu veux transformer le tableau en un objet ?
    Le tout pour le mettre dans la base ??

    Je suis largué là ... :s

    > Bingo
    Tout dépend ce que tu veux faire en fait.
    Si tu comptes faire plus de traitement php, tu sérialize.
    Si tu veux plus détailler le tout dans ta base de donnée tu peux faire comme tu dis.
    Mais la fonction serialize a été faite (en gros) pour pouvoir insérer un tableau dans une variable. Et puis si tu veux faire des recherches dessus, tu unserialize puis re serialize. Ok c'est p'tet pas la meilleure soluce mais elle marche tres bien.

    De toute façon il y a plein de façon de faire une seule chose en programmation, c'pas nouveau :)
    j0k3r_n0ir, 17 Février 2005
    #14
  15. Offline
    Bingo Beer Addict
    C'est certain.
    Je m'étonnais juste qu'il y ait un tel consensus pour la sérialisation, alors que ça n'apporte pas d'avantage. Mais ça fonctionne parfaitement bien-sûr. :wink:
    Bingo, 17 Février 2005
    #15
  16. Offline
    Carambar He once forgot how to cry
    Voici juste un petit exemple pour ceux qui s'en sortirais pas avec la fonction serialize() (toujours par rapport au sujet d'origine) :

    Code:
    CREATE DATABASE `dbtest`;
    CREATE TABLE serialize_test (id tinyint(4) DEFAULT '0' NOT NULL AUTO_INCREMENT, serialize TEXT NOT NULL);
    Code:
    <? $db = mysql_connect("localhost","root");
    mysql_select_db("dbtest",$db);
    $sqldonnees = addslashes(serialize($donnees)); // transformer les caractères que MySQL ne digère pas
    $resultat = mysql_query("INSERT INTO serialize_test (serialize) VALUES ('$sqldonnees')");
    mysql_close($db);
    
    $db = mysql_connect("localhost","root");
    mysql_select_db("dbtest",$db);
    $query = "select serialize from dbtest";
    $resultat = mysql_query($query,$db);
    echo "<pre>"; print_r (unserialize((mysql_result($result,0,"serialize"))));
    mysql_close($db);
    ?>
    Carambar, 17 Février 2005
    #16
  17. Offline
    j0k3r_n0ir ex membre
    Glups ... $sqldonnees ou $sqldata faut savoir :)
    Bref dans le principe c'est bon.
    j0k3r_n0ir, 17 Février 2005
    #17
  18. Offline
    zoheir cvm.mangaleet()
    il demande de stocker facilement un array.. je me demande si c'est possible de le stocker en tant qu'objet, en tout cas en mysql je sais pas du tout, c'est pourquoi je demande..
    zoheir, 17 Février 2005
    #18
  19. Offline
    j0k3r_n0ir ex membre
    OKayyyyyy
    Je viens de comprendre, mais transformer le tableau en objet pour le mettre dan la base ... on dira que c'est encore une solution ...

    Mais je tiens tête (lol) à dire que serialize est le mieux :D
    j0k3r_n0ir, 17 Février 2005
    #19
Statut de la discussion:
Fermée.