Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Замена тегов по всей таблице в БД (http://forum.oszone.net/showthread.php?t=66823)

Coutty 05-06-2006 16:45 446848

Замена тегов по всей таблице в БД
 
Здравствуйте!
Помогите, пожалуйста, разобраться с 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 446868

Цитата:

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

Vlad Drakula 05-06-2006 17:09 446870

Coutty
Цитата:

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

Coutty 05-06-2006 17:23 446891

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 446942

Coutty
а PHPMyAdmin там не поставить?

Coutty 05-06-2006 19:01 446975

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

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

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

mar 05-06-2006 19:22 446983

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

Coutty 05-06-2006 19:39 446994

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


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

PHP код:

<?php

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

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

for (
$b$b<$c$b++)
  {
  
$sqlmysql_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 447055

Coutty
все хорошо, что хорошо кончается :)
Цитата:

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

mysql --host=мой_хост --user=юзер --password=пароль  база

Coutty 06-06-2006 07:41 447150

Цитата:

Код: mysql --host=мой_хост --user=юзер --password=пароль база
Сработало =)
Спасибо


Время: 14:28.

Время: 14:28.
© OSzone.net 2001-