Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

An efficient way to save an Array and its Keys to a database

I am trying to save lots of variables to a database and it is getting ridiculous now. I am using PHP and MySQL.

Is there a way, I can get the array value and the array keys (array keys are exactly the same as the table column/field names) in one go without having to add a new variable and table column pair.

To be honest, I just need help with constructing the SQL String only, the rest is setup for me.

I can add the new column to the database table when I have to store a new variable.

Thanks all for any help

like image 436
Abs Avatar asked Jan 04 '10 19:01

Abs


2 Answers

If you want to create a SQL query from your array, this might help:

// Sample array
$array = array(
             'key1' => 'value1',
             'key2' => 'value2'
             ...
             'key10' => 'value10'
         );

// Get and escape the keys
$keys = array_map('mysql_real_escape_string', array_keys($array));
// Escape the values
$array = array_map('mysql_real_escape_string', $array);
// Build query
$query = "INSERT INTO table(`".implode('`, `', $keys)."`) VALUES('".implode("', '", $array)."')";

mysql_query($query);

In this case, the query would look something like this:

INSERT INTO
    table(`key1`, `key2` ... `key10`)
VALUES
    ('value1', 'value2' ... 'value10')

If you have a multidimensional array (an array of arrays) you can create a query as follows:

// Sample multidimensional array
$array = array(
             array('key1' => 'value1', 'key2' => 'value2'),
             array('key1' => 'value3', 'key2' => 'value4'),
             array('key1' => 'value5', 'key2' => 'value6')
         );

// Get and escape the keys
$keys = array_map('mysql_real_escape_string', array_keys(current($array)));
// Array to store values for the query
$values = array();
// Loop every row and insert into $values array
foreach($array as $row) {
    // Escape all items
    array_map('mysql_real_escape_string', $row);
    $values[] = "('".implode("', '", $row)."')";
}

$query = "INSERT INTO table(`".implode('`, `', $keys)."`) VALUES ".implode(', ', $values);

mysql_query($query);

And in this case, the resulting query would be something like this:

INSERT INTO
    table(`key1`, `key2`)
VALUES
    ('value1', 'value2'),
    ('value3', 'value4'),
    ('value5', 'value6')

Now only thing you have to worry about is creating the corresponding columns to the database.

like image 102
Tatu Ulmanen Avatar answered Sep 27 '22 17:09

Tatu Ulmanen


Serialize the data and write it to a single field in one table. Then to retrieve the data unserialize it and you are left with an array.

<?php
$array = array("hello", "world");
$serialized = serialize($array);

// -> Then write $serialized to database
?>

To retrieve

<?php      
// -> First Get $serialized from database

$array = unserialize($serialized);
?>
like image 31
Chaim Avatar answered Sep 27 '22 16:09

Chaim