早在我知道之前 - 不是我现在知道的很多 - 我在php中设计了一个web应用程序,它在运行值之后将数据插入到我的mysql数据库中htmlentities().我最终醒悟过来,取消了这一步,把它放在输出而不是输入中,继续我的快乐方式.
然而,我已经不得不重新访问一些旧的数据,不幸的是我有一个问题,当它显示在屏幕上时,我显示的值显示有效两次.
那么,是否有一种mysql或phpmyadmin方法可以将所有较旧的受影响的行更改回相关的字符,还是我必须编写脚本来读取每一行,解码并更新12个表中的所有1700万行?
编辑:
感谢大家的帮助,我在下面用一些代码编写了我自己的答案,它不是很漂亮,但它早先在测试数据上工作,所以当我在床上时,禁止有人指出我的代码中的一个明显的错误我将是明天在备份数据库上运行它,然后在实时数据库上运行它,如果运行正常的话.
我最终使用了这个,不是很漂亮,但我很累,现在是凌晨2点,它完成了它的工作!(编辑:关于测试数据)
$tables = array('users', 'users_more', 'users_extra', 'forum_posts', 'posts_edits', 'forum_threads', 'orders', 'product_comments', 'products', 'favourites', 'blocked', 'notes');
foreach($tables as $table)
{
$sql = "SELECT * FROM {$table} WHERE data_date_ts < '{$encode_cutoff}'";
$rows = $database->query($sql);
while($row = mysql_fetch_assoc($rows))
{
$new = array();
foreach($row as $key => $data)
{
$new[$key] = $database->escape_value(html_entity_decode($data, ENT_QUOTES, 'UTF-8'));
}
array_shift($new);
$new_string = "";
$i = 0;
foreach($new as $new_key => $new_data)
{
if($i > 0) { $new_string.= ", "; }
$new_string.= $new_key . "='" . $new_data . "'";
$i++;
}
$sql = "UPDATE {$table} SET " . $new_string . " WHERE id='" . $row['id'] . "'";
$database->query($sql);
// plus some code to check that all out
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9811 次 |
| 最近记录: |