Comunidad de diseño web y desarrollo en internet online

Usando php serialize y update a Mysql hace un extraño comportamiento

Citar            
MensajeEscrito el 24 Mar 2011 02:51 pm
Hola,
Esto es lo más extraño que me ha pasado. Tengo un array en php que lo guardo en un campo de la BD (Mysql). Para guardar el array uso serialize, tomo una parte del array (es un contador), aumento uno de los valores en 1 y lo guardo nuevamente. Todo bien, sólo que de vez en cuando cuando tiene que guardar el valor 1, guarda 2 o 3.
El código:

Código PHP :

$query =  sprintf("SELECT c FROM cat WHERE id=%s",GetSQLValueString($rubro_actual, "int"));
$sc = mysql_query($query, $zion) or die(mysql_error());
$row_sc = mysql_fetch_assoc($sc);

// Tomo el valor y lo convierto a array
$carray = unserialize($row_sc['c']);

// selecciono la parte del array que quiero modificar
if ($carray[$r] != "") {
  $carray[$r]++;
} else {
  $carray[$r] = 1;
}

// lo convierto para guardarlo
$c = serialize($carray);
$update = sprintf("UPDATE cat SET c=%s WHERE id=%s",GetSQLValueString($c, "text"),GetSQLValueString($rubro_actual, "int"));
$ok_update = mysql_query($update, $zion) or die(mysql_error());
echo $c;


Acá la parte extraña: Todo aparentemente funciona bien, el último echo, que va después del update, muestra la cadena de forma correcta, pero al revisar en la BD, si el valor era 1, aparece como 2 o a veces 3. Entonces, php envió la información bien, pero mysql modificó el valor...¿?

Saludos!

Javier

Por -Javier-

21 de clabLevel



Genero:Masculino  

Diseñador programático o Programador gráfico

firefox
Citar            
MensajeEscrito el 24 Mar 2011 10:16 pm
nose pero talvez esta en la parte de

Código PHP :

if ($carray[$r] != "") { 
     $carray[$r]++; 
} else { 
  $carray[$r] = 1; 
}

por lo que veo estas comprobando si el campo $carray[$r] esta vacio o no pero lo haces con el modo de cadena o string
y veo que agregas informacion de un entero int <> string aunque php hace las conversiones o casting automatico no hay que abusarlos
haber prueba cambiandolo por este otro

Código PHP :

if (isset($carray[$r])) {
     if(is_int($carray[$r]))
     {
           $carray[$r]++; 
     }
     else
      {
            echo "<h2>'$carray[$r]' no es un entero</h2>";
      }
} else { 
  $carray[$r] = 1; 
}

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.