Показать полную графическую версию : [решено] Замена тегов по всей таблице в БД
Здравствуйте!
Помогите, пожалуйста, разобраться с SQL-запросом.
На сайте *.h15.ru стоит форум phpBB2. При импорте в него (командой "Восстановить базу данных") бэкапа локальной базы данных (mySQL4) все скобки тэгов заменились на их html-аналоги. Т.е. было, скажем <b>, а стало <b>. Видимо, это из-за настроек php (там стоит magic_quotes = 1. Точно не помню, как этот параметр называется, но он делает то же самое, что и функция addslashes() в PHP).
В скриптах, которые писал сам, мог ещё добавить при обработке функцию stripslashes(), но в скрипты phpBB вряд ли - не знаю куда. И, в любом случае, массив данных довольно большой, загружать ещё раз не хотелось бы.
Каким sql-запросом можно сделать так:
"найти & l t ; заменить на '<' по таблице table_name 50 записей, начиная с N-записи". ?
50 записей - потому что при большом объёме работ сервер возвращает ошибку скрипта.
Или, подскажите, пожалуйста, по какому запросу читать док.
Перекапывать всю документацию по MySQL нет ни времени, ни желания, ни особого знания английского.
При импорте в него (командой "Восстановить базу данных") бэкапа локальной базы данных
а нельзя залить не командой форума, а по-нормальному, через mysql ? Доступ к консоли есть?
Vlad Drakula
05-06-2006, 17:09
Coutty
Видимо, это из-за настроек php (там стоит magic_quotes = 1. Точно не помню, как этот параметр называется, но он делает то же самое, что и функция addslashes() в PHP).
1) а пробовал отключать это?
2) эта настройка не оказывает влияние на HTML теги... только на ["'\]
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 там не поставить?
PHPMyAdmin слишком тяжёлый для пересылки - 8 Мб. Я со своим GPRS-интернетом это не осилю. Да и уйдёт на это целый день, наверное. Разве только архивом посылать, да скриптом разархивировать... Но всё равно многовато.
Вообще же, поставить можно.
Может быть попробовать скрипт написать:
1. Запрос записи
2. Обработка тэгов
3. Обновление таблицы.
4. GOTO 1
Самый дешёвый вариант будет.
Просто я думал, что, может есть специальный SQL-запрос для замены...
Coutty
сравните команду, которую задаете для запуска mysql и данные для доступа к базе для php. Если можно, то и другое (с измененным хостом, если это не localhost, именем пользователя и паролем) - сюда. Попробуем понять в чем дело.
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("<", "<", $arr[post_text]);
$arr[post_text] = str_replace(">", ">", $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 за помощь (иначе бы сидел и ждал у моря погоды).
Coutty
все хорошо, что хорошо кончается :)
В консоли я просто пишу: mysql. И вот получается результат как я писал раньше.
Дома из консоли так и запускается. Или там надо сразу указывать базу данных с паролем?
В скрипте пишу так:
mysql_connect(database,username,password);
mysql_select_db('base');
на будущее, раз есть username и password их надо указывать, да и base тоже. Что-то вроде такого:
mysql --host=мой_хост --user=юзер --password=пароль база
Код: mysql --host=мой_хост --user=юзер --password=пароль база
Сработало =)
Спасибо
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.