如果输入复选框,如何更新序列化数组

时间:2017-02-08 21:40:09

标签: php mysql arrays serialization

我正在学习序列化,虽然我理解这个概念,但我并不熟悉它的局限性。

以下是一个虚构的场景,比如说我有一个名为的表,并且在表周内有3列。第三列保存序列化数据如下:

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

然后我还有另一张名为的餐桌,内餐如下:

INSERT INTO `meal` (`meal_id`, `meal_name`) VALUES
(1, 'Chorizo tapas'),
(2, 'Mediterranean halloumi burger'),
(3, 'Lamb Moussaka'),
(4, 'Snappy Asian Fish En Papillote'),
(5, 'Puttanesca Risotto'),
(6, 'Mexican Pork Chilli With Apple Salsa'),
(7, 'Warm Greek Salad');

现在说我有一些带有一些复选框的HTML,如下所示:

Monday     [] 
Tuesday    []
Wednesday  []
Thursday   []
Wednesday  []
Thursday   []
Friday     []
Saturday   []
Sunday     []

然后我决定添加另一餐,其中meal_id为8,并在星期一框中打勾,是否可以更新序列化数组以反映勾选框,如下所示:

'a:7:{i:0;s:1:"8";i:1;s:1:"2";i:2;s:1:"3";i:3;s:1:"4";i:4;s:1:"5";i:5;s:1:"6";i:6;s:1:"7";}'),

了解" 8"现在已经取代了" 1"。餐桌有点不相干,因为它是一个序列化的数组,但我已将其添加到上下文中。

我想知道是否有可能做我正在描述的事情?

假设我猜这样的事情:

$monday=$_POST['monday'];    
$result = mysqli_query($conn,"SELECT meal_id from WEEK");
$array = unserialize( $result );
$array[0] = $meal_id;
$sfood=serialize($array);

if ($_POST['weekday'] == 'monday')
{
mysqli_query($conn, "UPDATE week SET meal_id ('$sfood') ");                 
} 

我知道上面的内容并不正确,但它是我尝试过的,不知道下一步该怎么做。

1 个答案:

答案 0 :(得分:0)

您应该在数据库中使用序列化数据的唯一时间是它与数据关系完全无关...想想存储CSS规则或其他内容,当您选择一行来帮助设置样式时,可以使用它们,但是与实际数据中的条件或关系无关。

那就是说,你的$result实际上并不是你想象的那样,它是一个sql结果集......你需要得到一行或一行:

while($row = $result->fetchObject()){
  $meal_id = $row->meal_id;
}

在运行其他查询之前,还需要在拥有所需内容时关闭连接:

$result->close

但是既然你似乎刚刚开始,你也应该了解PDO。根据我的经验,它更适合许多项目。