Строка ошибки «Ссылка на объект, не установленная на экземпляр объекта.» указывает, что вы не назначили экземпляр объекта объектной ссылке, и все же вы получаете доступ к свойствам / методам этого объекта.
например: скажем, у вас есть класс под названием myClass и он содержит одно свойство prop1.
public Class myClass
{
public int prop1 {get;set;}
}
Теперь вы получаете доступ к этому prop1 в каком-то другом классе, как показано ниже:
public class Demo
{
public void testMethod()
{
myClass ref = null;
ref.prop1 = 1; //This line throws error
}
}
выше строки выдает ошибку, потому что ссылка класса myClass объявлена, но не создана, или экземпляр объекта не назначается referecne этого класса.
Чтобы исправить это, вам нужно создать экземпляр (присвоить объект ссылке на этот класс).
public class Demo
{
public void testMethod()
{
myClass ref = null;
ref = new myClass();
ref.prop1 = 1;
}
}
sqldump в текстовый файл, найти / заменить, повторно импортировать sqldump.
Дамп базы данных в текстовый файл mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql
Восстановить базу данных после того, как вы сделали изменения к нему. mysql -u root -p[root_password] [database_name] < dumpfilename.sql
Простое решение
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
Это невозможно - вам нужно выполнить ОБНОВЛЕНИЕ для каждой таблицы отдельно.
ПРЕДУПРЕЖДЕНИЕ: ДУБИО, НО ЭТО РАБОТАЕТ (ВЕРОЯТНО) РЕШЕНИЕ СЛЕДУЕТ
Альтернативно , вы можете сбросить базу данных через mysqldump и просто выполнить поиск / замену в результирующем файле SQL. (Я бы рекомендовал отключить все, что может касаться базы данных, пока это выполняется, а также использовать флаги -add-drop-table и -extended-insert.) Однако вам нужно быть уверенным, что поиск / замена текста не изменит ничего, кроме самих данных (т. е. что текст, который вы собираетесь менять, может не произойти как часть синтаксиса SQL), и я действительно попытаюсь сделать повторную вставку сначала пустую тестовую базу.)
Короткий ответ: вы не можете.
Длинный ответ: вы можете использовать INFORMATION_SCHEMA , чтобы получить определения таблиц и использовать его для генерации необходимых операторов UPDATE динамически. Например, вы можете начать с этого:
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_schema'
Я постараюсь избежать этого, хотя если возможно.
Я просто хотел поделиться тем, как я это нашел / заменил вещь с помощью базы данных sql, потому что мне нужно было заменить ссылки из файла sessionbuddy из файла Chrome.
Если вы находитесь в phpMyAdmin, и у вас есть только минимальное изменение, вы можете сделать это простым способом.
Вы всегда можете выбрать либо все таблицы, либо любые. Не забудьте указать ключевое слово поиска, оно будет использоваться в качестве подстановочного знака (%).
sibeecst_passion
. wp_ewwwio_images
WHERE (CONVERT (id
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (path
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (image_md5
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (results
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (gallery
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (image_size
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee% 'ИЛИ CONVERT (orig_size
ИСПОЛЬЗОВАНИЕ utf8) LIKE'% sibee% 'ИЛИ CONVERT (updates
ИСПОЛЬЗОВАНИЕ utf8) LIKE'% sibee% 'ИЛИ CONVERT (updated
ИСПОЛЬЗОВАНИЕ utf8) LIKE'% sibee% 'ИЛИ CONVERT (trace
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (attachment_id
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (resize
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (converted
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (level
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (pending
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee%' ИЛИ CONVERT (backup
ИСПОЛЬЗОВАНИЕ utf8) LIKE '% sibee% ') Это сильно означает, что ваши данные НЕ НОРМАЛИЗИРОВАНЫ для начала. Вы действительно должны это исправить.
Somteh = такая вещь должна работать (NB вы не упомянули о том, что используете какие-либо другие языки, поэтому ее записывали как хранимую процедуру MySQL)
create procedure replace_all(find varchar(255),
replce varchar(255),
indb varcv=char(255))
DECLARE loopdone INTEGER DEFAULT 0;
DECLARE currtable varchar(100);
DECLARE alltables CURSOR FOR SELECT t.tablename, c.column_name
FROM information_schema.tables t,
information_schema.columns c
WHERE t.table_schema=indb
AND c.table_schema=indb
AND t.table_name=c.table_name;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET loopdone = 1;
OPEN alltables;
tableloop: LOOP
FETCH alltables INTO currtable, currcol;
IF (loopdone>0) THEN LEAVE LOOP;
END IF;
SET stmt=CONCAT('UPDATE ',
indb, '.', currtable, ' SET ',
currcol, ' = word_sub(\'', find,
'\','\'', replce, '\') WHERE ',
currcol, ' LIKE \'%', find, '%\'');
PREPARE s1 FROM stmt;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END LOOP;
END //
Я оставлю это вам, чтобы выяснить, как объявить функцию word_sub - я сделал достаточно свободного программирования здесь.
почему?
, потому что есть большая вероятность, что ваша база данных содержит сериализованные данные (особенно таблицу wp_options), поэтому использование «замены» может привести к поломке данных.
Использовать рекомендуемую сериализацию: https : //www.protectpages.com/tools/WordpressMigrator
MySQL Search & amp; Заменить инструмент
Очень полезный веб-инструмент, написанный на PHP, который позволяет легко искать и заменять текстовые строки в базе данных MySQL.
Другой вариант (в зависимости от варианта использования) заключается в использовании продуктов DataMystic TextPipe и DataPipe . Я использовал их в прошлом, и они отлично поработали в сложных сценариях замены и без необходимости экспортировать данные из базы данных для поиска и замены.