Save PHP array to MySQL? Save PHP array to MySQL? arrays arrays

Save PHP array to MySQL?


There is no good way to store an array into a single field.

You need to examine your relational data and make the appropriate changes to your schema. See example below for a reference to this approach.

If you must save the array into a single field then the serialize() and unserialize() functions will do the trick. But you cannot perform queries on the actual content.

As an alternative to the serialization function there is also json_encode() and json_decode().

Consider the following array

$a = array(    1 => array(        'a' => 1,        'b' => 2,        'c' => 3    ),    2 => array(        'a' => 1,        'b' => 2,        'c' => 3    ),);

To save it in the database you need to create a table like this

$c = mysql_connect($server, $username, $password);mysql_select_db('test');$r = mysql_query(    'DROP TABLE IF EXISTS test');$r = mysql_query(    'CREATE TABLE test (      id INTEGER UNSIGNED NOT NULL,      a INTEGER UNSIGNED NOT NULL,      b INTEGER UNSIGNED NOT NULL,      c INTEGER UNSIGNED NOT NULL,      PRIMARY KEY (id)    )');

To work with the records you can perform queries such as these (and yes this is an example, beware!)

function getTest() {    $ret = array();    $c = connect();    $query = 'SELECT * FROM test';    $r = mysql_query($query,$c);    while ($o = mysql_fetch_array($r,MYSQL_ASSOC)) {        $ret[array_shift($o)] = $o;    }    mysql_close($c);    return $ret;}function putTest($t) {    $c = connect();    foreach ($t as $k => $v) {        $query = "INSERT INTO test (id,".                implode(',',array_keys($v)).                ") VALUES ($k,".                implode(',',$v).            ")";        $r = mysql_query($query,$c);    }    mysql_close($c);}putTest($a);$b = getTest();

The connect() function returns a mysql connection resource

function connect() {    $c = mysql_connect($server, $username, $password);    mysql_select_db('test');    return $c;}


Generally, yes, serialize and unserialize are the way to go.

If your data is something simple, though, saving as a comma-delimited string would probably be better for storage space. If you know that your array will just be a list of numbers, for example, then you should use implode/explode. It's the difference between 1,2,3 and a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}.

If not, then serialize and unserialize work for all cases.


Just use the serialize PHP function:

<?php$myArray = array('1', '2');$seralizedArray = serialize($myArray);?>

However, if you are using simple arrays like that you might as well use implode and explode.Use a blank array instead of new.