nixp.ru v3.0

18 октября 2017,
среда,
01:20:17 MSK

DevOps с компанией «Флант»
KIVagant написал 19 февраля 2006 года в 17:36 (506 просмотров) Ведет себя как мужчина; открыл 1 тему в форуме, оставил 3 комментария на сайте.

PHP4 + MySQL

Недавно впервые (к глубокому сожалению) дошли руки до изучения свойства magic_quotes_gpc. Оказалось, что я очень давно и очень не правильно использовал функции addslashes() и stripslashes(). Из-за того, что в php.ini свойство magic_quotes_gpc было равно On, я загонял в БД данные, с лишними знаками «\».

Теперь, разобравшися с всем этим механизмом работы добавления и убирания \», решил отключить magic_quotes_gpc, заменить все addslashes() на mysql_real_escape_string() и поудалять из кода все stripslashes(). С помощью Rapid PHP 2005 это заняло не более 2х минут. Теперь все входящие в БД данные экранируются, но возникла проблема — что делать с всеми данными, которые уже были загнаны в БД вместе с лишними знаками «\»?

Особенно если учесть, что используется свой аналог ВВ-тегов, в которых кавычки — сплошь и рядом и теперь все они не работают правильно и повсюду в текстах вижу \«текст\», \’текст\' и т.п..

У меня в базе — 80 таблиц, CMS установлена у нескольких клиентов, плюс мой локальный тестовый экземпляр. Вручную перебирать все базы — слишком долгий и ненадежный процесс.

Следовательно, вопрос: возможно ли написать скрипт, который смог бы пройтись по таблицам (по списку из массива), найти все поля с типом text, longtext, varchar, циклически получить данные из этих полей, пропустить их через функцию stripslashes() и загнать обратно, не нарушая индексацию (autoincrement)? Оптимизация скорости работы этого скрипта мне не особо интересна, это нужно будет сделать только один раз.

Заранее благодарен за любые конструктивные предложения по решению этой траблы…

ICQ: 55055888

Longobard
KIVagant
Следовательно, вопрос: возможно ли …

Возможно

KIVagant
загнать обратно, не нарушая индексацию (autoincrement)

А кто мешает использовать update? :)

KIVagant

LONGOBARD, совесть мешает. Если не в курсе как помочь — зачем отвечаешь? Про Update я как-то и сам в курсе. Главный вопрос — как определить название и тип поля в скрипте, который сканирует все таблицы?

rgo

в MySQL Tuturial, который в info mysql, предлагают пользоваться конструкциями:

`SHOW TABLES’, и `DESCRIBE table-name’.

myst

KIVagant, читай доки, ок?

KIVagant

rgo, спасибо за конкретный ответ. Хоть один человек в тему сказал. Поищу в доках указанные конструкции — хоть ясно куда копать.

myst, постараюсь. Сколько там страниц доков по mysql в интернете?.. Ну почему, если задается вопрос, то обязательно отвечают так, чтоб пришлось повторить этот же вопрос ещё 3-4 раза?…

forum.php.ru, совет пользователя 440hz:

[

    написать скриптик который:

    1. переберет все таблицы.

    2. просмотрит все текстовые поля.

    3. заменит в записях кавычки.

    где не понятно?

]

Опупенно аккуратная интерпретация моего же вопроса мне… Что-то вроде:

- «Как мне открыть дверь, если ключ не поворачивается в замке?»

- «Тебе нужно: 1. Достать ключ; 2. Вставить ключ в замок; 3. Повернуть ключ в замке и открыть дверь;»…

Genie

дампишь базу

меняешь в дампе что и как надо

восстанавливаешь базу их подкорректированного дампа

индексы останутся на месте.

KIVagant

Genie, что-то такому простому решению я не додумался. Правда нужно будет аккуратно дамп обрабатывать. А то нечаянно можно лишнее удалить и испортить все. Спасибо, нужно будет попробовать.