我刚刚开始学习序列化,我有一个问题,我似乎无法找到一个简单的解释。
假设我有一个名为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;
但是当我检查我的数据库时,没有任何改变。
我做错了什么,是否有可能做我想要实现的目标?
答案 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;}
不建议存储此类数据,因为这样无法使用查询处理此数据