Comment stocker un array dans une BDD SQL ?

Statut
N'est pas ouverte pour d'autres réponses.

Carambar

Elite
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.
 
J

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
 
1er
OP
Carambar

Carambar

Elite
Merci beaucoup ! C'est chouette d'avoir des gens qui savent bien exploiter un langage ^^.
 
J

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 :)
 
1er
OP
Carambar

Carambar

Elite
j0k3r_n0ir a dit:
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 ...
C'est vrai, mais parfois on s'amuses à réinventer la roue des fois alors qu'il une solution 10x plus simple :p .
 
J

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 ^^
 

zoheir

cvm.mangaleet()
c'est possible de stocker l'array en tant qu'objet dans la bdd ?
 

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 ;)
 
J

j0k3r_n0ir

ex membre
La solution du serialize marche très bien :)

cvm leet a dit:
c'est possible de stocker l'array en tant qu'objet dans la bdd ?
Pourquoi faire ?
 

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.
 

null

ose();
Perso j'aurais dit comme j0k3r mais avec implode() et explode() mais la sérialisation est mieux pour là
 

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.
 

guslinux

Gamerz'ien
j0k3r_n0ir a dit:
La solution du serialize marche très bien :)

cvm leet a dit:
c'est possible de stocker l'array en tant qu'objet dans la bdd ?
Pourquoi faire ?
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 !
 
J

j0k3r_n0ir

ex membre
guslinux a dit:
pour pas devoir le recréer à chaque page :D
... 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 :)
 

Bingo

Beer Addict
j0k3r_n0ir a dit:
De toute façon il y a plein de façon de faire une seule chose en programmation, c'pas nouveau :)
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:
 
1er
OP
Carambar

Carambar

Elite
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);
?>
 
J

j0k3r_n0ir

ex membre
Glups ... $sqldonnees ou $sqldata faut savoir :)
Bref dans le principe c'est bon.
 

zoheir

cvm.mangaleet()
j0k3r_n0ir a dit:
La solution du serialize marche très bien :)

cvm leet a dit:
c'est possible de stocker l'array en tant qu'objet dans la bdd ?
Pourquoi faire ?
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..
 
J

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
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut