Войти

Показать полную графическую версию : [решено] Замена тегов по всей таблице в БД


Coutty
05-06-2006, 16:45
Здравствуйте!
Помогите, пожалуйста, разобраться с SQL-запросом.

На сайте *.h15.ru стоит форум phpBB2. При импорте в него (командой "Восстановить базу данных") бэкапа локальной базы данных (mySQL4) все скобки тэгов заменились на их html-аналоги. Т.е. было, скажем <b>, а стало &lt;b&gt;. Видимо, это из-за настроек php (там стоит magic_quotes = 1. Точно не помню, как этот параметр называется, но он делает то же самое, что и функция addslashes() в PHP).
В скриптах, которые писал сам, мог ещё добавить при обработке функцию stripslashes(), но в скрипты phpBB вряд ли - не знаю куда. И, в любом случае, массив данных довольно большой, загружать ещё раз не хотелось бы.

Каким sql-запросом можно сделать так:
"найти & l t ; заменить на '<' по таблице table_name 50 записей, начиная с N-записи". ?
50 записей - потому что при большом объёме работ сервер возвращает ошибку скрипта.

Или, подскажите, пожалуйста, по какому запросу читать док.
Перекапывать всю документацию по MySQL нет ни времени, ни желания, ни особого знания английского.

mar
05-06-2006, 17:08
При импорте в него (командой "Восстановить базу данных") бэкапа локальной базы данных
а нельзя залить не командой форума, а по-нормальному, через mysql ? Доступ к консоли есть?

Vlad Drakula
05-06-2006, 17:09
Coutty
Видимо, это из-за настроек php (там стоит magic_quotes = 1. Точно не помню, как этот параметр называется, но он делает то же самое, что и функция addslashes() в PHP).
1) а пробовал отключать это?
2) эта настройка не оказывает влияние на HTML теги... только на ["'\]

Coutty
05-06-2006, 17:23
Vlad Drakula:
1) отключить не могу - не дают, всё-таки бесплатный хостинг
2) хм...Вы правы :blush: как бы там ни было, теги заменяются.

mar, доступ к консоли есть. Пытаюсь запустить там mysql. Пишет "ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)"

Vlad Drakula
05-06-2006, 18:11
Coutty
а PHPMyAdmin там не поставить?

Coutty
05-06-2006, 19:01
PHPMyAdmin слишком тяжёлый для пересылки - 8 Мб. Я со своим GPRS-интернетом это не осилю. Да и уйдёт на это целый день, наверное. Разве только архивом посылать, да скриптом разархивировать... Но всё равно многовато.
Вообще же, поставить можно.

Может быть попробовать скрипт написать:
1. Запрос записи
2. Обработка тэгов
3. Обновление таблицы.
4. GOTO 1

Самый дешёвый вариант будет.
Просто я думал, что, может есть специальный SQL-запрос для замены...

mar
05-06-2006, 19:22
Coutty
сравните команду, которую задаете для запуска mysql и данные для доступа к базе для php. Если можно, то и другое (с измененным хостом, если это не localhost, именем пользователя и паролем) - сюда. Попробуем понять в чем дело.

Coutty
05-06-2006, 19:39
mar
В консоли я просто пишу: mysql. И вот получается результат как я писал раньше.
Дома из консоли так и запускается. Или там надо сразу указывать базу данных с паролем?
В скрипте пишу так:
mysql_connect(database,username,password);
mysql_select_db('base');


Решил проблему так:

<?php

require_once ("parts/db.php"); // там происходит соединение с БД

$a=$_GET[a]; # количество итераций (сколько записей обрабатывать)
$b=$_GET[b]; # с какой начинать
$c= $a+$b;

for ($b; $b<$c; $b++)
{
$sql= mysql_query ("SELECT * FROM `bb_posts_text` WHERE `post_id`=$b");
if (mysql_num_rows($sql)!=false)
{
$arr=mysql_fetch_assoc($sql);
$arr[post_text] = str_replace("&lt;", "<", $arr[post_text]);
$arr[post_text] = str_replace("&gt;", ">", $arr[post_text]);
if (mysql_query("UPDATE `bb_posts_text` SET `post_text`='$arr[post_text]' WHERE `post_id`=$b LIMIT 1"))
{
echo "<br>Запись $arr[post_id] успешно обновлена";
}
else
{
if (mysql_errno() != 0)
{
echo $arr[post_id] . "Ошибка в SQL-запросе - ";
echo mysql_errno.": ".mysql_error()."<br>";
}
}
}
}

echo "<a href='convert.php?a=$a&b=$c'>Ссылка дальше</a><noscript><body></body></noscript>";
?>

Записи обновились, теги на местах, всё работает.

Спасибо, mar и Vlad Drakula за помощь (иначе бы сидел и ждал у моря погоды).

mar
05-06-2006, 22:29
Coutty
все хорошо, что хорошо кончается :)

В консоли я просто пишу: mysql. И вот получается результат как я писал раньше.
Дома из консоли так и запускается. Или там надо сразу указывать базу данных с паролем?
В скрипте пишу так:
mysql_connect(database,username,password);
mysql_select_db('base');

на будущее, раз есть username и password их надо указывать, да и base тоже. Что-то вроде такого:
mysql --host=мой_хост --user=юзер --password=пароль база

Coutty
06-06-2006, 07:41
Код: mysql --host=мой_хост --user=юзер --password=пароль база

Сработало =)
Спасибо




© OSzone.net 2001-2012