【问题标题】:having trouble updating value serialized array in MYSQL在 MYSQL 中更新值序列化数组时遇到问题
【发布时间】:2012-01-19 11:35:39
【问题描述】:

这是我的工作

 - 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 中我是否遗漏了代码中的某些内容?

【问题讨论】:

  • 为什么保存不正确?如果 "once" 是一个字符串,它应该被引用。
  • 我添加了一个 qoutes 但也没有工作

标签: php mysql serialization


【解决方案1】:

首先这是行不通的,如果你的数组中有单引号,那么你需要这样做

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

或朋友。

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

【讨论】:

    【解决方案2】:

    正如 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'");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      相关资源
      最近更新 更多