2.1 升级到 2.2 后,Upgrading data.. Unable to unserialize value.

3.66K 浏览M2交流区

2.1 升级到 2.2 后,Upgrading data.. Unable to unserialize value.

2.2.2后,后台configration 多行数据的保存 从序列化serialize改成json_encode()了。同时前台也是通过json_decode读取数据的。

所以 如果你前台用json_decode读取数据的话 就会出问题。

需要先修改core_config_data的数据,把serialize的数据改成json_encode来保存。

代码如下:

比如在项目路径/cli下新建一个php文件,updateConfiValue.php

getObjectManager(); $resource = $objectManager->get('MagentoFrameworkAppResourceConnection'); $connection = $resource->getConnection(); $tableName = $resource->getTableName('core_config_data'); //gives table name with prefix //Select Data from table //$sql = "Select * FROM " . $tableName . " WHERE `path`='carriers/flatrate/postcoderanges'"; $sql = "Select * FROM {$tableName}"; $result = $connection->fetchAll($sql); // gives associated array, table fields as key in array. foreach ($result as $row) {     if (checkIsSerialized($row['value'])) {         $value = json_encode(unserialize($row['value']));         $configId = $row['config_id'];         $sql = "Update " . $tableName . " Set value = "."'".$value."'"." where config_id = $configId";         $connection->query($sql);     } }      function checkIsSerialized($str) {     $data = @unserialize($str);     if ($str === 'b:0;' || $data !== false) {         return true;     }      return false; }

执行代码:

php cli/updateConfiValue.php

这样就都改过来了。

最后于 9月前 被admin编辑 ,原因:
0