2011-12-10 72 views
0

我们的论坛基于phpbb3,并且有时我们一直在使用语法高亮模块。我们决定放弃mod并返回到基本的bbcode标签。长话短说 - 我需要更新包含MySQL的字段(phpbb_forum_posts,POST_TEXT):搜索+替换mySQL数据

Text Text Text Text Text 
[swordfish filename=code.bas] 
code code code 
123 
code code[/swordfish] 
Text Text Text Text Text 

Text Text Text Text Text 
[code] 
code code code 
123 
code code[/code] 
Text Text Text Text Text 

这是值得强调的是[swordfish filename=code.bas]可以包含其他领域,如[swordfish filename=code.bas abc 123]。不管第一个标记是什么,它都需要更改为[code]

这有点超出了我的“需要知道”的范围,如果有人能够帮助设计一个mySQL或PHP脚本,实现大规模更新。 (我知道我周围的基本方式,不够高级查找/替换)

+0

这些全部在一列中的一个表中,还是代码存在于多个表和多列中? –

回答

0

在这里你去:

$regexp = '/\[(\/)?swordfish[^\]]*\]/'; 

$push = 'REPLACE whatever_table (id, post_text) 
      VALUES'; 

$pull = 'SELECT id, post_text 
      FROM whatever_table 
      WHERE whatever = condition'; 

if ($result = $mysqli->query($pull)) { 
    while ($row = $result->fetch_assoc()) { 
     $row['post_text'] = preg_replace($regexp, '[$1code]', $row['post_text']); 

     $push .= sprintf(
      ' ("%s", "%s"),', 
      $mysqli->real_escape_string($row['id']), 
      $mysqli->real_escape_string($row['post_text']) 
     ); 
    } 

    $result->free(); 
} 

$mysqli->query(rtrim($push, ',')); 

编辑
请注意REPLACE声明是不完整的!你将不得不取回每一列并写回(不只是我提到的两个)。