Re: Storing an array on a table?
| From: | tg-php at gryffyndevelopment dot com | Date: | Thu, 01 Sep 2005 15:41:12 +0000 |
| Subject: | Re: Storing an array on a table? | ||
| Groups: | php.db | ||
| Request: | Send a blank email to php-db+get-40194@lists.php.net to get a copy of this message | ||
Ahh..thanks Jordan.. sorry I missed that one and thanks for the info. I assumed serialize was just
magic and worked properly. hah. Now I know.
I always thought it was sloppy to use anyway, but in a pinch, it's nice to know there's an
option like that. Imploding does sound better though.
-TG
= = = Original message = = =
Yes, this has been mentioned in this thread. But with serialize/
unserialize, you can run into other problems that may be more
confusing/difficult to troubleshoot. e.g.:
http://www.php.net/serialize
> >As you can see, the original array :
> >$arr["20041001103319"] = "test"
> >
> >after serialize/unserialize is:
> >$arr[683700183] = "test"
>
> yepp, and i can explain it.
>
> the internal compiler of php does not hit anys rule wich foces him
> to make that number a string during serialisation. since it becomes
> an integer and php supports 32bit interger not arbitary bitwidth
> this is what happens:
>
> "20041001103319"
> equals hexadecimal:
>
> 0x123A28C06FD7h
>
> if you cut away the frontpart cutting down to 32bis,
> you get:
>
> 0x28C06FD7h
>
> wich equals 683700183.
For simple arrays, I prefer storing everything as a simple imploded
string. YMMV.
Jordan
On Sep 1, 2005, at 10:18 AM, <tg-php@gryffyndevelopment.com> <tg-
php@gryffyndevelopment.com> wrote:
> Sorry, didn't catch this thread from the beginning, but did anyone
> recommend trying the serialize() and unserialize() commands?
> They'll convert the array to a block of text that can be stored,
> retrieved and unserialized.
>
> My gut instinct is that if you're trying to store any array in a
> database, you may not have thought through your design very well.
> BUT.. I also know that there are cases where you might want to
> (I've actually done it before... being lazy in that case..hah) so
> dont take that as criticism, just wondering if there's a "more
> right" way to do it.
>
> If that's what you need to do though, definitely check out
> serialize (unless someone knows something I don't).
>
> Serialize() should do essentially what's being proposed below, just
> without having to figure out what string may not be in your array.
>
> good luck!
>
> -TG
>
>
> = = = Original message = = =
>
> if you just have a simple array with automatic numeric keys and text
> you could just implode the data to a string with a separator not
> found in your data:
> $dataArray = array("hello", "goodbye", "etc.");
> $storable = implode("||||", $dataArray);
> // $storable becomes "hello||||goodbye||||etc."
>
> //then, use explode to get the original array back again
> $dataArray = explode("||||", $storable);
>
> you could use a similar technique if you want to put the keys in as
> well, albeit slightly more complicated (e.g. use "||||" to separate
> each element in the array and "||" to separate each key from its
> value). Just find a divider you know your data will not contain, such
> as a pipe: "|".
>
> This has worked well for me.
>
> Jordan
>
>
>
> On Sep 1, 2005, at 8:55 AM, Miguel Guirao wrote:
>
>
>
>>
>> I want to store an array into a field on a MySQL table, Is it
>> posible to
>> save it? Maybe into a string field?
___________________________________________________________
Sent by ePrompter, the premier email notification software.
Free download at http://www.ePrompter.com.