[решено] Замена тегов по всей таблице в БД

Ответить
Аватара пользователя
Coutty

[решено] Замена тегов по всей таблице в БД

Сообщение Coutty »

Здравствуйте!

Помогите, пожалуйста, разобраться с SQL-запросом.



На сайте *.h15.ru стоит форум phpBB2. При импорте в него (командой "Восстановить базу данных") бэкапа локальной базы данных (mySQL4) все скобки тэгов заменились на их html-аналоги. Т.е. было, скажем , а стало . Видимо, это из-за настроек php (там стоит magic_quotes = 1. Точно не помню, как этот параметр называется, но он делает то же самое, что и функция addslashes() в PHP).

В скриптах, которые писал сам, мог ещё добавить при обработке функцию stripslashes(), но в скрипты phpBB вряд ли - не знаю куда. И, в любом случае, массив данных довольно большой, загружать ещё раз не хотелось бы.



Каким sql-запросом можно сделать так:

"найти & l t ; заменить на '
Аватара пользователя
mar

Re: [решено] Замена тегов по всей таблице в БД

Сообщение mar »

Цитата:



При импорте в него (командой "Восстановить базу данных") бэкапа локальной базы данных



а нельзя залить не командой форума, а по-нормальному, через mysql ? Доступ к консоли есть?
Аватара пользователя
Vlad Drakula

Re: [решено] Замена тегов по всей таблице в БД

Сообщение Vlad Drakula »

Coutty


Цитата:



Видимо, это из-за настроек php (там стоит magic_quotes = 1. Точно не помню, как этот параметр называется, но он делает то же самое, что и функция addslashes() в PHP).



1) а пробовал отключать это?

2) эта настройка не оказывает влияние на HTML теги... только на ["'\]
Аватара пользователя
Coutty

Re: [решено] Замена тегов по всей таблице в БД

Сообщение Coutty »

Vlad Drakula:

1) отключить не могу - не дают, всё-таки бесплатный хостинг

2) хм...Вы правы Изображение как бы там ни было, теги заменяются.



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

Re: [решено] Замена тегов по всей таблице в БД

Сообщение Vlad Drakula »

Coutty

а PHPMyAdmin там не поставить?
Аватара пользователя
Coutty

Re: [решено] Замена тегов по всей таблице в БД

Сообщение Coutty »

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

Вообще же, поставить можно.



Может быть попробовать скрипт написать:

1. Запрос записи

2. Обработка тэгов

3. Обновление таблицы.

4. GOTO 1



Самый дешёвый вариант будет.

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

Re: [решено] Замена тегов по всей таблице в БД

Сообщение mar »

Coutty

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

Re: [решено] Замена тегов по всей таблице в БД

Сообщение Coutty »

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 за помощь (иначе бы сидел и ждал у моря погоды).
Аватара пользователя
mar

Re: [решено] Замена тегов по всей таблице в БД

Сообщение mar »

Coutty

все хорошо, что хорошо кончается Изображение


Цитата:



В консоли я просто пишу: mysql. И вот получается результат как я писал раньше.

Дома из консоли так и запускается. Или там надо сразу указывать базу данных с паролем?

В скрипте пишу так:

mysql_connect(database,username,password);

mysql_select_db('base');



на будущее, раз есть username и password их надо указывать, да и base тоже. Что-то вроде такого:



Код:

Код: Выделить всё

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

Re: [решено] Замена тегов по всей таблице в БД

Сообщение Coutty »

Цитата:



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



Сработало =)

Спасибо
Ответить

Вернуться в «Вебмастеру»