Saltar al contenido

PHP serializar datos en Mysql

Solución:

Probé su ejemplo en mi sistema y, después de la serialización, se devuelve el siguiente valor:

string(42) "a:1:{i:0;s:24:"a:4:{i:1;s:7:"fdsfdsf";i";}"

Esto es lo que se agregará a la base de datos. Sin embargo, se desaconseja almacenar la entrada del usuario sin formato en la base de datos. Primero debe formatear la entrada de usuario simple con mysql_real_escape_string() ya que escapará de los personajes críticos.

Aparte de eso, si unserialize() se llama en el texto serializado leído desde la base de datos, la matriz se devuelve correctamente. Debería ser seguro, pero puede producir resultados inesperados.

Ten mucho cuidado con el almacenamiento de matrices serializadas en una base de datos. La serialización devuelve una cadena, por lo que el campo en el que almacena los datos suele ser VARCHAR o TEXT. Si simplemente Sobrescribir la matriz almacenada con una nueva, los datos antiguos se perderán por completo. Para actualizar la base de datos, asegúrese de leer primero los datos de la base de datos en una matriz y actualizarlos, y solo luego volver a escribirlos en la base de datos.

Si bien no está prohibido, usar y almacenar material serializado en la base de datos generalmente crea muchos problemas. La base de datos tiene muchos tipos de datos conocidos por defecto, y las grandes matrices serializadas crean una sobrecarga y complican la ejecución, y es simplemente un dolor de cabeza si el sistema necesita ser modificado más tarde. Y no puede utilizar consultas de relación en campos serializados.

El viejo camino

Cuando sigues usando mysql_ podría escribir consultas como esta:

$sql = sprintf("INSERT INTO mytable (a) VALUES ('%s')",
    mysql_real_escape_string(serialize($myvar))
);
mysql_query($sql) or die("oh no!");

La forma recomendada

Para PDO y mysqli tiene la opción de usar declaraciones preparadas, lo que es muy recomendable exactamente con el propósito de prevenir los vectores de ataque de inyección SQL. Un ejemplo en DOP:

$stmt = $db->prepare('INSERT INTO mytable (a) VALUES (:myvar)');
$stmt->execute(array(
    ':myvar' => serialize($myvar),
));

Longitudes de campo

Además, asegúrese de que la longitud de sus datos serializados no exceda el tamaño de la columna del campo de la tabla; una variable serializada truncada es bastante inútil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *