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

标签 php mysql serialization

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

假设我有一个名为 week 的表,在 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; 

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

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

最佳答案

您必须从表格行中读取该列。将其反序列化为一个 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;}

Storing data like this is not recommended, as it makes this data impossible to process using queries

关于php - 如何附加数据库中已存在的序列化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42115377/

相关文章:

PHP/MySQL : get unlimited data

php - 存在多个表时最有效的登录方式

mysql - SQL SELECT 语句显示基于值 ("win"或 "loss"的赢/输数)

php - 在我的本地 Windows 机器上,我如何编写一个脚本来每天下载漫画并将其通过电子邮件发送给自己?

php - PDO MySQL : Insert multiple rows in one query

java - Hibernate 和 MySQL 配置

mysql - 了解 postgresql/sql 的细节

java - Gson 自定义序列化不适用于 java.lang.Object

NHibernate 序列化问题 - 类型 'NHibernate.Cfg.Configuration' 未标记为可序列化

java - 在 Java 中序列化对象时出现 StackOverflowError