因此,我们在包含旧用户数据的数据库中包含历史记录。我们不想删除日志,而只是删除其中的一些数据。它作为已经序列化的数组存储在MySQL中的字段中。
a:1:{s:4:"Test";s:17:"user data";}
如何更新测试值(用户数据)?要么通过MySQL或PHP所以它看起来像下面?这会产生数百行。
a:1:{s:4:"Test";s:17:"***";}
这就是我刚刚尝试检索的一些数据
$sqltext = "SELECT log_data FROM log WHERE log_data != '' LIMIT 1";
$result = mysql_query ($sqltext) or die(SqlError(__FILE__,__LINE__,__FUNCTION__));
$row = mysql_fetch_array($result);
$deserialized = unserialize($row->log_data);
var_dump($deserialized);
返回:bool(false)
该数组包含许多内容,包括html
答案 0 :(得分:1)
警告自PHP 5.5.0起,不推荐使用MySQL函数集,自PHP 7.0.0起,该函数集已被删除。相反,应该使用MySQLi或PDO_MySQL扩展。
我怀疑查询的结果可能没有回来。当我测试(here)以下代码时,它按预期工作:
<?php
$row = array("log_data" => 'a:1:{s:4:"Test";s:9:"user data";}');
$deserialized = unserialize($row['log_data']);
var_dump($deserialized);
?>
因此,您可能需要检查是否有结果或是序列化数据:
<?php
$sqltext = "SELECT log_data FROM log WHERE log_data != '' LIMIT 1";
$result = mysql_query ($sqltext);
if(!$result){
die(SqlError(__FILE__,__LINE__,__FUNCTION__));
}
$row = mysql_fetch_assoc($result);
$deserialized = unserialize($row['log_data']);
var_dump($deserialized);
?>
答案 1 :(得分:0)
以下是我需要提取序列化数据,对其进行反序列化,更改多行值并再次更新重新序列化数据。
while ($row_something = mysql_fetch_assoc($something)) {
$log_id = $row_something['log_id'];
$deserialized = unserialize($row_something['log_data']);
foreach ($deserialized AS $key => $value) {
if ($key == 'user_data') {
$deserialized['user_data'] = "***";
}
$updateSQL = sprintf("UPDATE log SET log_data=%s WHERE log_id=%s",
GetSQLValueString(serialize($deserialized), "text"),
GetSQLValueString($row_something['log_id'], "int"));
mysql_select_db($database_connection, $connection);
$Result1 = mysql_query($updateSQL, $connection) or die(mysql_error());
}
}