Эффективный способ сохранить массив и его ключи в базе данных - PullRequest
5 голосов
/ 04 января 2010

Я пытаюсь сохранить множество переменных в базе данных, и теперь это становится нелепым. Я использую PHP и MySQL.

Есть ли способ, я могу получить значение массива и ключи массива (ключи массива точно такие же, как имена столбцов / полей таблицы) за один раз, без необходимости добавлять новую переменную и пару столбцов таблицы.

Если честно, мне просто нужна помощь в создании только строки SQL, остальное для меня настроено.

Я могу добавить новый столбец в таблицу базы данных, когда мне нужно сохранить новую переменную.

Спасибо всем за помощь

Ответы [ 3 ]

7 голосов
/ 04 января 2010

Если вы хотите создать запрос SQL из вашего массива, это может помочь:

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

В этом случае запрос будет выглядеть примерно так:

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

Если у вас есть многомерный массив (массив массивов), вы можете создать запрос следующим образом:

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

И в этом случае результирующий запрос будет выглядеть примерно так:

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

Теперь единственное, о чем вам нужно беспокоиться, это создание соответствующих столбцов в базе данных.

2 голосов
/ 04 января 2010

Сериализация данных и запись их в одно поле в одной таблице. Затем для получения данных десериализуйте их, и у вас останется массив.

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

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

Для извлечения

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

$array = unserialize($serialized);
?>
1 голос
/ 04 января 2010

Вы можете попытаться сохранить сериализованный массив опций в базе данных. например, от: http://us3.php.net/manual/en/function.serialize.php.

<?php
// $session_data contains a multi-dimensional array with session
// information for the current user.  We use serialize() to store
// it in a database at the end of the request.

$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
      "UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
    $stmt = odbc_prepare($conn,
     "INSERT INTO sessions (id, data) VALUES(?, ?)");
    if (!odbc_execute($stmt, $sqldata)) {
        /* Something went wrong.. */
    }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...