如何附加数据库中已存在的序列化字符串

时间:2017-02-08 14:09:52

标签: php mysql serialization

我刚刚开始学习序列化,我有一个问题,我似乎无法找到一个简单的解释。

假设我有一个名为week的表,而且在一周内我有3列,第三列包含一堆序列化的膳食ID,就像存储在我的数据库中一样:

 INSERT INTO `week` (`week_id`, `meal_code`, `meal_id`) VALUES
(1, 'week12016', 'a:6:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;}');

但后来我想将另一个meal_id附加到现有字符串但不更新任何其他列,以便它读取

(1, 'week12016','a:7:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;}') 

我已尝试在php文件中存储以下内容

$food=array("7");
$sfood=serialize($food);

然后尝试将7添加到周表中的现有meal_ids

mysqli_query($conn,"UPDATE week
            SET meal_id ('$sfood')");       
    //if entry into the database is successful, confirm with a alert popup and refresh the home page        
if(mysqli_affected_rows($conn) > 0){
    //header("location: admin.php");
 header("refresh:0; url=admin.php");
  echo "<script type='text/javascript'>alert('Upload Successful!')</script>";   
exit; 

但是当我检查我的数据库时,没有任何改变。

我做错了什么,是否有可能做我想要实现的目标?

1 个答案:

答案 0 :(得分:0)

您必须从表格行中读取该列。将其反序列化为PHP变量,然后向其添加新的出现。

然后序列化新数组并将其存储回数据库

// SELECT from table
$s = 'a:7:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;}';

$d = unserialize($s);

print_r($d);

$d[] = 99;
print_r($d);

$s2 = serialize($d);
echo $s2;

// UPDATE table row

结果

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 99
)
a:8:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:99;}
  

不建议存储此类数据,因为这样无法使用查询处理此数据