2010-01-04 16 views
5

Estoy tratando de guardar muchas variables en una base de datos y ahora es ridículo. Estoy usando PHP y MySQL.Una manera eficiente de guardar una matriz y sus claves en una base de datos

Hay una manera, puedo obtener el valor de matriz y las teclas de matriz (las teclas de matriz son exactamente las mismas que las columnas de tabla/nombres de campo) de una sola vez sin tener que agregar una nueva variable y un par de columnas de tabla.

Para ser sincero, solo necesito ayuda para construir SQL String, el resto está configurado para mí.

Puedo agregar la nueva columna a la tabla de la base de datos cuando tengo que almacenar una nueva variable.

Gracias a todos por cualquier ayuda

Respuesta

7

Si desea crear una consulta SQL de su matriz, esto podría ayudar:

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

En este caso, la consulta sería algo como esto:

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

Si tiene una matriz multidimensional (una matriz de matrices) puede crear una consulta de la siguiente manera:

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

Y en este caso, la consulta resultante sería algo como esto:

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

Ahora lo único que tiene que preocuparse es la creación de las columnas correspondientes a la base de datos.

+0

impresionante! Gracias Tatu, eso es exactamente lo que estaba buscando, ¡yo también soy muy bueno para lograrlo! :) – Abs

1

Usted podría intentar almacenar una gran variedad de opciones serializado en la base de datos. por ejemplo, desde: 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.. */ 
    } 
} 
?> 
2

Serialice los datos y escríbalos en un solo campo en una tabla. Luego, para recuperar los datos, des seializarlos y se queda con una matriz.

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

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

Para recuperar

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

$array = unserialize($serialized); 
?> 
+0

+1 Aprendí este truco muy recientemente, bastante útil. – Erik

+0

Pensé en este método cuando intenté hacer un formulario que el administrador podría modificar en cualquier momento. Así que este fue el método más fácil sin jugar con entradas anteriores cuando el administrador cambió el formulario. – Chaim

+0

No es una forma recomendada, ya que hace que los valores insertados no sean consultables. –

Cuestiones relacionadas