еще раз.Я пытаюсь пройти таблицу базы данных и заменить все экземпляры старого BBCode (то есть: [i:fs8d979]
) и заменить его простым BBCode ([i]
).Тем не менее, я получаю очень запутанные результаты.
$root_path = './';
include($root_path.'includes/common.php');
$posts = array();
$sql = 'SELECT post_id, post_text FROM posts';
$db->query($sql);
while($row = $db->fetch_assoc())
{
$posts[]['id'] = $row['post_id'];
$posts[]['text'] = $row['post_text'];
}
foreach($posts as $post)
{
$regex = "/\[(\D)(\:[a-zA-Z0-9_]{1,})\]/";
if(preg_match($regex, $post['text'], $matches))
{
$string = preg_replace('/'.$matches[2].'/', '', $post['text']);
$sql = 'UPDATE posts SET post_text = "'.$string.'" WHERE post_id = '.$post['id'];
$db->query($sql);
echo $post['id'].'--Matched and replaced<br />';
}
else
{
echo $post['id'].'--No Match<br />';
}
}
echo 'done';
когда я запускаю этот скрипт, я получаю вывод примерно так:
1302--No Match
--No Match
1303--No Match
--No Match
17305--No Match
--Matched and replaced
5532--No Match
--No Match
17304--No Match
--No Match
1310--No Match
--No Match
может показаться, что скрипт пытаетсявсе дважды, и я не уверен почему.Поля базы данных также не обновляются.Я повторил все для целей отладки, и все переменные установлены, и все выглядит так, как будто оно должно работать правильно.Есть предложения?