Php 在MYSQL中更新值序列化数组时遇到问题

Php 在MYSQL中更新值序列化数组时遇到问题,php,mysql,serialization,Php,Mysql,Serialization,这就是我要做的 - extract my serialize array from databse - deserialize it - change the value - after changing I serialize it - then write it back to MYSQL database table. 但是我很难将它写回MYSQL数据库表 $myarray = Array ( [dogname] => Array (

这就是我要做的

 - extract my serialize array from databse
 - deserialize it
 - change the value
 - after changing I serialize it
 - then write it back to MYSQL database table.
但是我很难将它写回MYSQL数据库表

$myarray = Array
(
    [dogname] => Array
        (
            [0] => white
            [1] => zeon
            [2] => imao
        )

    [visit] => Array
        (
            [0] => once
            [1] => twice
            [2] => twice
        )
}
我用这种方式将它保存到我的表中
serialize($myarray)

现在我提取它并取消序列化

$unserializearray = unserialize($myserialarray); 

then search for array value to change and back to table

$keys = array_keys($unserializearray['dogname'], 'imao', true);
foreach($keys as $key)
{
    // find dogname imao and change its visit to once
    $unserializearray['visit'][$key] = "once";


$update = serialize($unserializearray);

//save the update    
mysql_query("UPDATE dogdetails SET checkup = '$update'
WHERE dogid = '1'");
}

但是它不能直接保存到mysql中,我会错过代码中的某些内容吗?

首先,如果数组中的某些内容只有一个引号,那么这是行不通的,所以您需要这样做

$update=mysql_real_escap_string(serialize($unserializearray),$dbhandle);
或者朋友


更重要的是,在我看来,您的数据库设计似乎存在严重缺陷:正如这里多次提到的那样,如果您希望单独访问字段,则不应在字段中存储多个值。在您的情况下,您用三只狗的内脏存储了三只狗,但您希望分别访问它们-这就是您的代码所做的。

正如Eugen所说,您的代码有很多地方出错

除此之外,该代码是否工作得更好:

$unserializearray = unserialize($myserialarray); 

then search for array value to change and back to table

$keys = array_keys($unserializearray['dogname'], 'imao', true);
foreach($keys as $key)
{
    // find dogname imao and change its visit to once
    $unserializearray['visit'][$key] = "once";
}

$update = mysql_real_escap_string(serialize($unserializearray));

//save the update    
mysql_query("UPDATE dogdetails SET checkup = '$update' WHERE dogid = '1'");

为什么它保存不正确?如果“once”是一个字符串,它应该被引用