Avatar billede Slettet bruger
20. maj 2006 - 11:58 Der er 12 kommentarer og
2 løsninger

Gemme array i database

hej
hvis jeg skal gemme et variabelt antal svar i en database kan jeg ikke lave et bestemt antal søjler da antallet jo er variabelt

Derfor har jeg tænkt at man kunne gemme svaret som et array i en søjle i databasen

Når man vil gemme et array i databasen skal feltet i Mysql så være "text" som type? det skal det vel Ik

Er det Normalt at man gemmer arrays i databasen for ikke at lave for mange søjler eller er det en dum måde at designe database?
Avatar billede michael_stim Ekspert
20. maj 2006 - 12:18 #1
Du kan bruge serialize() unserialize().
Men det er ikke så smart at gemme arrays i databaser. Det begränser jo sögemulighederne en del.
Avatar billede michael_stim Ekspert
20. maj 2006 - 12:21 #2
Hvis det er pga tomme felter, kan du normalisere den en tand mere. Lave en tabel mere af de felter der ofte er tomme, med reference til den tabel du har.
Avatar billede Slettet bruger
20. maj 2006 - 12:53 #3
Det er bare en række følge der skal gemmes så der skal aldrig søges på de enkelte tal

Jeg har lavet arrayet om til en string og så gemt det som "text" med komma separeret. Når jeg så har taget det ud igen har jeg brugt split() til at lave det om til array igen. Men det er nok lidt for omstændigt
Avatar billede jakobdo Ekspert
20. maj 2006 - 13:25 #4
serialize() og unserialize() som michael_stim er inde på, er jo næsten lavet til formålet. Det fylder lidt ekstra, men du kan gemme et array "direkte" i tabellen og trække det ud som array igen.
Avatar billede Slettet bruger
20. maj 2006 - 13:32 #5
jeg har læst i manualen

...............To make the serialized string into a PHP value again, use unserialize(). serialize() handles all types, except the resource-type. You can even serialize() arrays that contain references to itself. References inside the array/object you are serialize()ing will also be stored.

When serializing objects, PHP will attempt to call the member function __sleep() prior to serialization. This is to allow the object to do any last minute clean-up, etc. prior to being serialized. Likewise, when the object is restored using unserialize() the __wakeup() member function is called.

Bemærk: This didn't work correctly until 4.0.7. <<<<-----------------------

Bemærk: In PHP 3, object properties will be serialized, but methods are lost. That limitation was removed in PHP 4 as both properties and methods are now restored. Please see the Serializing Objects section of Classes and Objects for more information.

It is not possible to serialize PHP built-in objects.

..................

Der står det "This didn't work correctly until 4.0.7"

Jeg kan ikke heltudrede hvad det er det ikke virker og jeg ved ikke om det er et problem man skal tage højde for

Med andre ord. Virker det der serialize() på php versioner før 4.0.7 ?

Hvis den virker korrekt er serialize vel "måden" man gemmer arrays i dataser og så skal jeg vel holde op med at lave det om til strings?

Det felt man gemmer i i databasen ...hvilken type skal det være?
Avatar billede michael_stim Ekspert
20. maj 2006 - 14:01 #6
Det serialize gör, er at lave dit array om til en string ;o)
Så feltet i tabellen skal stadig väre til characters.
Om det virker eller ikke virker på versioner för 4.0.7 skla jeg ikke kunne sige, da jeg ikke har testet.
Avatar billede jakobdo Ekspert
20. maj 2006 - 21:08 #7
Jeg tror det som der bemærkes er __wakeup() og __sleep()
Så når du "bare" har et array med tekst/tal i, så er det ikke aktuelt.
Avatar billede Slettet bruger
20. maj 2006 - 21:12 #8
Hey
ved du hvad  __wakeup() og __sleep() gør?

Jeg kunne ikke helt forstå deres forklaring
Avatar billede jakobdo Ekspert
21. maj 2006 - 10:21 #9
Det var når man gemmer objekter.
When serializing objects, PHP will attempt to call the member function __sleep() prior to serialization. This is to allow the object to do any last minute clean-up, etc. prior to being serialized. Likewise, when the object is restored using unserialize() the __wakeup() member function is called.

Og min dårlige danske oversættelse:
Når serializin objekter, vil php forsøge at kalde hjælpe funktionen __sleep() inden serializing. Dette gøres for at tillade objektet at lave en sidste oprydning inden det bliver serialized. Omvendt med __wakeup().

Men da du ikke bruger objekter, er det slet ikke aktuelt for dig.
Avatar billede Slettet bruger
23. maj 2006 - 16:28 #10
Tak for hjælpen
I skal ha jeres points så læg svar
Avatar billede michael_stim Ekspert
23. maj 2006 - 16:32 #11
Fik du det til at fungere?
Avatar billede Slettet bruger
23. maj 2006 - 16:43 #12
Jeg har faktisk ikke helt prøvet det endnu men jeg har fattet hvordan det bruges. Tak for tippet

Jeg venter lige med point til jakobdo også har lagt et svar
Avatar billede jakobdo Ekspert
23. maj 2006 - 17:37 #13
Svar!
Avatar billede jakobdo Ekspert
23. maj 2006 - 20:17 #14
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester