for($i=$begin;;$i+=$count) - ошибко, или я чтото не понимаю оО
после $i=$begin у тебя две точки с запятой, чтот там намудрено, там должно быть три аргумента, типа for ($i = 0; $i < $p; $i++), в первом переменные стартовые, потом условие продолжения итераций цикла и 3: действие после каждой итерации(прохода)
draliokero Разницы большой не будет - просто читаем файл дампа построчно (fgets), а потом просто восстанавливаем БД из этого дампа. Выгода - не убьем базу, меньшее количество обращений к БД, не надо следить за кавычками
m0HzeZedi Синтаксис for такой же как в Си. Любые переменные в for($i1;$i2;$i3) - могут быть пропущены. В случае пропуска второго параметра - цикл будет выполняться бесконечно. Поэтому внутри цикла есть break;
#Wolf# В скрипт закралась ошибка, вместо $tmp=str_replace нужно $tmp=preg_replace
#Wolf# По-хорошему, лучше сделать полный дамп базы и обработать, иначе будет слишком много запросов к БД.
PHP код:
<?
set_time_limit(0);
$begin=0; // С какой позиции начинать
$count=10; // Сколько строк БД обрабатывать за раз
for($i=$begin;;$i+=$count)
{
$result=mysql_query("SELECT * FROM posts LIMIT $i,$count");
if (!mysql_num_rows($result)) break;
while ($row=mysql_fetch_array($result))
{
$tmp=preg_replace('~<a.*href="([^"]+)".*>.*</a>~Usi','$1',$row['full_news']);
// В запросе на обновление не уверен насчет экранирования кавычек
if ($tmp!=$row['full_news']) $update=mysql_query("UPDATE posts SET full_news='$tmp' WHERE full_news='".$row[full_news]."'");
}
@file_put_contents('cur_pos.txt',$i); // Пишем в файл текущую позицию, на всякий случай
}
Но повторюсь - лучше обрабатывать построчно дамп. Так можно будет проконтролировать, что все обработано правильно и не угробить случайно БД
несколько вопросов:
1)
PHP код:
$i+=$count
что это за += 0_0
2) тестил с одной новостью. фор пока убрал. так новость отлично режется но не апдейтится. ругается .
вот к примеру выборка из бд
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Alcohol 120% 1.9.7.6221 + Activation Keymaker v3.6' title='Alcohol 120% 1.9.7.62' at line 1
как я понимаю получается какая то херня с кавычками
Последний раз редактировалось #Wolf#; 19.03.2009 в 04:52..
2)
if ($tmp!=$row['full_news']) $update=mysql_query("UPDATE posts SET full_news='$tmp' WHERE full_news='".mysql_real_escape_string($row['full_news'])."'");
#Wolf# Ну я же написал что не уверен в экранировании) У PaCo тоже не совсем правильно. Надо:
PHP код:
if ($tmp!=$row) $update=mysql_query("UPDATE posts SET full_news='".mysql_real_escape_string($tmp).'\' WHERE full_news=\''.mysql_real_escape_string($row)."'");