2012-05-21 10 views
9

Quiero guardar información adicional antes de enviar el pedido total a Paypal. Para cada artículo, he creado una sola columna en mi base de datos MySQL donde quiero almacenarla. Ahora estaba pensando en guardarlo como una matriz que puedo leer más adelante para crear una página PHP. Los campos adicionales se toman de los campos de formulario de entrada.Guardar matriz en la base de datos mysql

Al usar una matriz ¿puedo estar seguro de no confundir la información?

+0

"Tengo una columna para cada elemento" .. ¿te refieres a la fila o? –

+4

almacenar una matriz en un solo campo mysql derrota el propósito de una base de datos. ¿Cómo se ve tu código actual? – Cfreak

+0

MySQL 5.7.8 y versiones posteriores ahora tienen compatibilidad nativa con JSON, lo que significa que puede poner una cadena JSON directamente en un campo de tabla en la base de datos. – Sliq

Respuesta

24

Puede almacenar la matriz usando serialize/unserialize. Con esa solución, no pueden usarse fácilmente desde otros lenguajes de programación, por lo que puede considerar usar json_encode/json_decode (lo que le da un formato ampliamente compatible). Evite usando implode/explode para esto ya que probablemente termine con errores o fallas de seguridad.

Tenga en cuenta que esto hace que su tabla no esté normalizada, lo que puede ser una mala idea ya que no puede consultar fácilmente los datos. Por lo tanto, considere esto cuidadosamente antes de seguir adelante. ¿Puede necesitar consultar los datos para estadísticas o de otra manera? ¿Hay otras razones para normalizar los datos?

Además, no guarde la matriz $_POST sin formato. Alguien puede crear fácilmente su propio formulario web y publicar datos en su sitio, enviando así un formulario realmente grande que ocupa mucho espacio. Guarde los campos que desee y asegúrese de validar los datos antes de guardarlos (para que no obtenga valores no válidos).

+0

por favor, podrían detallar los fallos de seguridad que rodean 'implode()' y 'explode()'. – verbumSapienti

+1

verbumSapienti, considera este fragmento de código: 'implode (':', ['12', '34', '5: 6'])' que da como resultado esta cadena: '12: 34: 5: 6'. Esto no debería ocurrir en primer lugar si tiene una validación de entrada adecuada (para que ningún valor pueda ser '5: 6'), pero también es siempre mejor usar funciones que estén parametrizadas y/o siempre muestren datos válidos y no ambiguos, como json_encode. –

+0

En primer lugar, hay un error ortográfico en su respuesta (se debe serializar y no en serie). En segundo lugar, serialize/unserialize es la forma estándar de almacenar estructuras enteras como cadenas en PHP. Puede serializar objetos, incluidas sus propiedades, etc. JSON es el mejor si solo quiere almacenar matrices, ya que es la solución más compatible para usar fuera de PHP. Puede leer JSON fácilmente en Javascript u otros idiomas. – barell

3

Utilice la función PHP serialize() para convertir matrices a cadenas. Estas cadenas se pueden almacenar fácilmente en la base de datos MySQL. Utilizando unserialize(), se pueden convertir a matrices de nuevo si es necesario.

+2

antes de guardar $ store = serizalize ($ someData); $ sql = "insertar en PaypalLogs (' store', 'created') value ('{$ store}', NOW())"; después de $ someData = unserizalize ($ row ['store']); – Sergey

8

La forma en que se hacen cosas así es con serializando la matriz, lo que significa "hacer una cadena fuera de ella". Para entender mejor esto, echar un vistazo a esto:

$array = array("my", "litte", "array", 2); 

$serialized_array = serialize($array); 
$unserialized_array = unserialize($serialized_array); 

var_dump($serialized_array); // gives back a string, perfectly for db saving! 
var_dump($unserialized_array); // gives back the array again 
0
<?php 
$myArray = new array('1', '2'); 
$seralizedArray = serialize($myArray); 
?> 
3

para convertir cualquier array (o cualquier objeto) en una cadena en PHP, llamar a la función serialize:

$array = array(1, 2, 3); 
$string = serialize($array); 
echo $string; 

$ string ahora contendrá una versión de cadena de la matriz. La salida del código anterior es la siguiente:

a:3:{i:0;i:1;i:1;i:2;i:2;i:3;} 

Para convertir de nuevo a partir de la cadena a la matriz, utilice unserialize:

// $array will contain (1, 2, 3) 
$array = unserialize($string); 
Cuestiones relacionadas