Как сделать поиск по базе данных
Перейти к содержимому

Как сделать поиск по базе данных

  • автор:

Как сделать поиск по базе данных

Рассмотрим, как мы можем создать в приложении на Android динамический поиск по базе данных SQLite.

Итак, создадим новый проект с пустой MainActivity. Для этого проекта возьмем базу данных из прошлой темы (или создадим новую). Данная база данных называется cityinfo и имеет одну таблицу users с тремя полями _id, name, age:

CREATE TABLE `users` ( `_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, `name` TEXT NOT NULL, `year` INTEGER NOT NULL );

Existing SQLite database in Android

И также добавим в проект в Android Studio папку assets , а в папку assets — только что созданную базу данных:

База данных SQLite в Android Studio

В моем случае база данных называется «cityinfo.db».

Как показано выше на скриншоте, добавив в проект в одну папку с MainActivity новый класс DatabaseHelper :

package com.example.livesearchapp; import android.database.SQLException; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase; import android.content.Context; import android.util.Log; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; class DatabaseHelper extends SQLiteOpenHelper < private static String DB_PATH; // полный путь к базе данных private static String DB_NAME = "cityinfo.db"; private static final int SCHEMA = 1; // версия базы данных static final String TABLE = "users"; // название таблицы в бд // названия столбцов static final String COLUMN_ID = "_id"; static final String COLUMN_NAME = "name"; static final String COLUMN_YEAR = "year"; private Context myContext; DatabaseHelper(Context context) < super(context, DB_NAME, null, SCHEMA); this.myContext=context; DB_PATH =context.getFilesDir().getPath() + DB_NAME; >@Override public void onCreate(SQLiteDatabase db) < >@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) < >void create_db() < File file = new File(DB_PATH); if (!file.exists()) < //получаем локальную бд как поток try(InputStream myInput = myContext.getAssets().open(DB_NAME); // Открываем пустую бд OutputStream myOutput = new FileOutputStream(DB_PATH)) < // побайтово копируем данные byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) >0) < myOutput.write(buffer, 0, length); >myOutput.flush(); > catch(IOException ex) < Log.d("DatabaseHelper", ex.getMessage()); >> > public SQLiteDatabase open()throws SQLException < return SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase.OPEN_READWRITE); >>

Перейдем к файлу activity_main.xml , который определяет визуальный интерфейс, и изменим его следующим образом:

Итак, у нас будет элемент ListView для отображения списка и текстовое поле для фильтрации.

Теперь изменим код MainActivity :

package com.example.livesearchapp; import androidx.appcompat.app.AppCompatActivity; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; import android.widget.FilterQueryProvider; import android.widget.ListView; import android.widget.SimpleCursorAdapter; public class MainActivity extends AppCompatActivity < DatabaseHelper sqlHelper; SQLiteDatabase db; Cursor userCursor; SimpleCursorAdapter userAdapter; ListView userList; EditText userFilter; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); userList = (ListView)findViewById(R.id.userList); userFilter = (EditText)findViewById(R.id.userFilter); sqlHelper = new DatabaseHelper(getApplicationContext()); // создаем базу данных sqlHelper.create_db(); >@Override public void onResume() < super.onResume(); try < db = sqlHelper.open(); userCursor = db.rawQuery("select * from " + DatabaseHelper.TABLE, null); String[] headers = new String[]; userAdapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, userCursor, headers, new int[], 0); // если в текстовом поле есть текст, выполняем фильтрацию // данная проверка нужна при переходе от одной ориентации экрана к другой if(!userFilter.getText().toString().isEmpty()) userAdapter.getFilter().filter(userFilter.getText().toString()); // установка слушателя изменения текста userFilter.addTextChangedListener(new TextWatcher() < public void afterTextChanged(Editable s) < >public void beforeTextChanged(CharSequence s, int start, int count, int after) < >// при изменении текста выполняем фильтрацию public void onTextChanged(CharSequence s, int start, int before, int count) < userAdapter.getFilter().filter(s.toString()); >>); // устанавливаем провайдер фильтрации userAdapter.setFilterQueryProvider(new FilterQueryProvider() < @Override public Cursor runQuery(CharSequence constraint) < if (constraint == null || constraint.length() == 0) < return db.rawQuery("select * from " + DatabaseHelper.TABLE, null); >else < return db.rawQuery("select * from " + DatabaseHelper.TABLE + " where " + DatabaseHelper.COLUMN_NAME + " like ?", new String[]); > > >); userList.setAdapter(userAdapter); > catch (SQLException ex)<> > @Override public void onDestroy() < super.onDestroy(); // Закрываем подключение и курсор db.close(); userCursor.close(); >>

Прежде всего надо отметить, что для фильтрации данных в адаптере, нам надо получить фильтр адаптера, а у этого фильтра выполнить метод filter() :

userAdapter.getFilter().filter(s.toString());

В этот метод filter() передается ключ поиска.

Для текстового поля мы можем отслеживать изменения содержимого с помощью слушателя:

userFilter.addTextChangedListener(new TextWatcher() < public void afterTextChanged(Editable s) < >public void beforeTextChanged(CharSequence s, int start, int count, int after) < >// при изменении текста выполняем фильтрацию public void onTextChanged(CharSequence s, int start, int before, int count) < userAdapter.getFilter().filter(s.toString()); >>);

В слушателе TextWatcher в методе onTextChanged как раз и вызывается метод filter() , в который передется введенная пользователем в текстовое поле последовательность символов.

Сам вызызов метода filter() мало на что влияет. Нам нало еще определить провайдер фильтрации адаптера, которые и будет инкапсулировать реальную логику фильтрации:

userAdapter.setFilterQueryProvider(new FilterQueryProvider() < @Override public Cursor runQuery(CharSequence constraint) < if (constraint == null || constraint.length() == 0) < return db.rawQuery("select * from " + DatabaseHelper.TABLE, null); >else < return db.rawQuery("select * from " + DatabaseHelper.TABLE + " where " + DatabaseHelper.COLUMN_NAME + " like ?", new String[]); > > >);

Сущность этого провайдера заключается в выполнении SQL-выражений к бд, а именно конструкций «select from» и «select from where like». Данные простейшие выражения выполняют регистрозависимую фильтрацию. В результате адаптаре получает отфильтрованные данные.

Следует также отметить следующий код:

if(!userFilter.getText().toString().isEmpty()) userAdapter.getFilter().filter(userFilter.getText().toString());

Данный код нам нужен при смене ориентации (например, с портретной на альбомную). И если ориентация устройства изменена, но в текстовом поле все же есть некоторые текст-фильтр, то выполняется фильтрация. Иначе бы она не выполнялась.

И после запуска мы сможем насладиться фильтрацией данных:

Поиск данных и объектов в базе данных MS SQL Server с помощью бесплатной утилиты dbForge Search

Описание общей потребности в поиске данных и объектов в базе данных

Поиск данных, а также хранимых процедур, таблиц и других объектов в базе данных является достаточно актуальным вопросом в том числе и для C#-разработчиков, а также и для .NET-разработки в целом.

Достаточно часто может возникнуть ситуация, при которой нужно найти:

  1. объект базы данных (таблицу, представление, хранимую процедуру, функцию и т д)
  2. данные (значение и в какой таблице располагается)
  3. фрагмент кода в определениях объектов базы данных

Сначала рассмотрим как можно осуществлять поиск данных и объектов в базе данных с помощью встроенных средств самой СУБД, а затем рассмотрим как это сделать с помощью бесплатной утилиты dbForge Search.

Поиск с помощью встроенных средств самой СУБД

Определить есть ли таблица Employee в базе данных можно с помощью следующего скрипта:

Поиск таблицы по имени

select [object_id], [schema_id], schema_name([schema_id]) as [schema_name], [name], [type], [type_desc], [create_date], [modify_date] from sys.all_objects where [name]='Employee'; 

Результат может быть примерно такой:

  1. идентификаторы объекта и схемы, где располагается объект
  2. название этой схемы и название этого объекта
  3. тип объекта и описание этого типа объекта
  4. даты и время создания и последней модификации объекта

Поиск всех объектов по подстроке в имени

select [object_id], [schema_id], schema_name([schema_id]) as [schema_name], [name], [type], [type_desc], [create_date], [modify_date] from sys.all_objects where [name] like '%Project%'; 

Результат может быть примерно такой:

Как видно из результата, здесь подстроку “Project” содержат не только две таблицы Project и ProjectSkill, но и также некоторые первичные и внешние ключи.

Чтобы понять кому именно принадлежат данные ключи, добавим в вывод поле parent_object_id и его имя и схему, в которой он располагается следующим образом:

Поиск всех объектов по подстроке в имени с выводом родительских объектов

select ao.[object_id], ao.[schema_id], schema_name(ao.[schema_id]) as [schema_name], ao.parent_object_id, p.[schema_id] as [parent_schema_id], schema_name(p.[schema_id]) as [parent_schema_name], p.[name] as [parent_name], ao.[name], ao.[type], ao.[type_desc], ao.[create_date], ao.[modify_date] from sys.all_objects as ao left outer join sys.all_objects as p on ao.[parent_object_id]=p.[object_id] where ao.[name] like '%Project%'; 

Результатом будет вывод таблицы с детальной информацией о родительских объектах, т е где определены первичные и внешние ключи:

В запросах используются следующие системные объекты:

  • таблица sys.all_objects
  • скалярная функция schema_name

Чтобы найти строковое значение по всем таблицам базы данных, можно воспользоваться следующим решением. Упростим данное решение и покажем как можно найти например значение “Ramiro” с помощью следующего скрипта:

Поиск строковых значений по подстроке во всех таблицах базы данных

set nocount on declare @name varchar(128), @substr nvarchar(4000), @column varchar(128) set @substr = '%Ramiro%' declare @sql nvarchar(max); create table #rslt (table_name varchar(128), field_name varchar(128), [value] nvarchar(max)) declare s cursor for select table_name as table_name from information_schema.tables where table_type = 'BASE TABLE' order by table_name open s fetch next from s into @name while @@fetch_status = 0 begin declare c cursor for select quotename(column_name) as column_name from information_schema.columns where data_type in ('text', 'ntext', 'varchar', 'char', 'nvarchar', 'char', 'sysname', 'int', 'tinyint') and table_name = @name set @name = quotename(@name) open c fetch next from c into @column while @@fetch_status = 0 begin --print 'Processing table - ' + @name + ', column - ' + @column set @sql='insert into #rslt select ''' + @name + ''' as Table_name, ''' + @column + ''', cast(' + @column + ' as nvarchar(max)) from' + @name + ' where cast(' + @column + ' as nvarchar(max)) like ''' + @substr + ''''; print @sql; exec(@sql); fetch next from c into @column; end close c deallocate c fetch next from s into @name end select table_name as [Table Name], field_name as [Field Name], count(*) as [Found Mathes] from #rslt group by table_name, field_name order by table_name, field_name drop table #rslt close s deallocate s 

Результат выполнения может быть таким:

Здесь выводятся имена таблиц и в каких столбцах хранится значение, содержащие подстроку “Ramiro”. А также количество найденных входов данной подстроки для найденной пары таблица-колонка.

Чтобы найти объекты, в определениях которых есть заданный фрагмент кода, можно воспользоваться следующими системными представлениями:

  1. sys.sql_modules
  2. sys.all_sql_modules
  3. sys.syscomments

Поиск фрагмента кода в определениях объектов базы данных

select obj.[object_id], obj.[name], obj.[type_desc], sc.[text] from sys.syscomments as sc inner join sys.objects obj on sc.[id]=obj.[object_id] where sc.[text] like '%code snippet%'; 

Здесь будет выведен идентификатор, название, описание и полное определение объекта.

Поиск с помощью бесплатной утилиты dbForge Search

Однако, более удобно поиск производить с помощью готовых хороших инструментов. Одним из таких инструментов является dbForge Search.

Для вызова этой утилиты в окне SSMS нажмите на кнопку .

Появится следующее окно поиска:

Обратите внимание на верхнюю панель (слева направо):

  1. можно переключать режим поиска (ищем DDL (объекты) или данные)
  2. непосредственно что ищем (какую подстроку)
  3. учитывать ли регистр, искать точное соответствие слову, искать вхождения:

  • группировать результат по типам объектов — кнопка
  • выбрать нужные типы объектов для поиска:

  • также можно задать несколько баз данных для поиска и выбрать экземпляр MS SQL Server
  • Это все в режиме поиска объектов, т е когда включен DDL:

    В режиме поиска данных изменится только выбор типов объектов:

    А именно будут доступны для выбора только таблицы, где и хранятся собственно сами данные:

    Теперь как и раньше найдем все вхождения подстроки “Project” в названиях объектов:

    Как видно, был выбран режим поиска по DDL-объектам, заполнено что ищем-строка “Project”, остальное все было по умолчанию.

    При выделении найденного объекта внизу отображается код определения данного объекта или всего его родительского объекта.

    Также можно переместить навигацию на найденный объект, щелкнув на кнопку :

    Можно также сгруппировать найденные объекты по их типу:

    Обратите внимание, что выводятся даже те таблицы, в которых есть поля, в именах которых содержится подстрока “Project”. Однако, напомним, что режим поиска можно менять: искать полное соответствие/частичное/учитывать регистр или нет.

    Теперь найдем значение “Ramiro” по всем таблицам:

    Обратите внимание, что внизу отображаются все строки, в которых содержится подстрока “Ramiro” выбранной таблицы Employee.

    Также можно переместить навигацию к найденному объекту, нажав как и ранее на кнопку :

    Таким образом мы можем искать нужные объекты и данные в базе данных.

    Заключение

    Были рассмотрены способы поиска как самих данных, так и объектов в базе данных как с помощью встроенных средств самой СУБД MS SQL Server, так и с помощью бесплатной утилиты dbForge Search.

    Также от компании Devart есть и ряд других бесплатных готовых решений, полный список которых можно посмотреть здесь.

    Источники

    • Search_Script.sql
    • SSMS
    • dbForge Search
    • Документация по Microsoft SQL
    • Бесплатные решения от компании Devart

    Поиск в базе данных с помощью phpMyAdmin

    Поиск в базе данных с помощью phpMyAdmin

    Запустить

    Поиск в базе данных с помощью phpMyAdmin

    Перед просмотром, пожалуйста, войдите в phpMyAdmin. Теперь давайте узнаем, как использовать функцию поиска. Сначала выберите базу данных, которую вы хотите найти . . затем нажмите вкладку Поиск. Давайте поищем имя Джон, используя знак процента (%) до и после нашего поискового запроса, в качестве подстановочного знака. Это означает, что phpMyAdmin будет искать любые данные, содержащие слово john, даже если у него есть текст до или после него. Когда будете готовы, нажмите Go. Это оно! Наш поисковый запрос дал один результат, и искомый термин выделен здесь. Отсюда мы можем редактировать, копировать или удалять данные, независимо от того, по какой причине нам был необходим поиск данных в первую очередь.

    Полезные ссылки

    Домен | Com домены на сайте Hostimul.com

    Домен — означает имя веб-сайта, которое позволяет пользователям Интернета получать доступ к своему веб-сайту. Доступ к веб-сайту, не имеющему этого им.. узнать больше

    Купить домен | Дешевые цены на домены в Hostimul.com

    Купить домен — Нет необходимости тратить время на поиск надежной и прибыльной компании для покупки домена. Как команда Hostimul.com, мы предлагаем вам.. узнать больше

    Дешевый Vps в Европе

    Дешевый Vps в Европе в Hostimul.com — это виртуальный частный сервер. Вы можете купить это на Hostimul.com, где мы предоставляем виртуальные серве.. узнать больше

    Vps в Европе

    Наш Vps в Европе будет для вас отличным решением, если вы переросли среду общего хостинга и задаетесь вопросом, что делать дальше. Наши специалист.. узнать больше

    Недорогой выделенный сервер

    Недорогой выделенный сервер – это выделенный виртуальный сервер, услуга хостинга, при которой клиент полностью получает в личное пользование вирту.. узнать больше

    Хостинг с большим дисковым пространством ✅

    Хостинг с большим дисковым пространством предоставляет пользователям все преимущества безлимитной услуги. Хостинги предлагают клиентам разные усл.. узнать больше

    Быстрый виртуальный хостинг✅

    Ищете быстрый виртуальный хостинг ? В Hostimul вы найдете все, что вам нужно. Давайте уточним что такое виртуальный хостинг? Когда придет время вы.. узнать больше

    Выделенный Сервер в Европе ✔️

    Выделенный сервер в Европе, предлагаемый Hostimul.com станет для вас уникальной возможностью получить доступный и надежный сервер для вашего прое.. узнать больше

    Купить Хостинг Дешево

    Хотите купить хостинг дешево для вашего сайта ? Добро пожаловать в Hostimul.com, где найдете только выгодные тарифы. На рынке доступно несколько .. узнать больше

    Облачный хостинг

    Решение выбрать облачный хостинг может быть продиктовано желанием иметь собственный сервер, и не платить за избыточную емкость жесткого диска, кот.. узнать больше

    Хостинг недорогой

    Ищете хостинг недорогой ? Hostimul.com будет для вас лучшим спутником по обеспечению вашего проекта наилучшей хостинговой услугой. В поисках самог.. узнать больше

    Сервер для сайта

    Надежный сервер для сайта необходим каждому, кто желает безопасный “ Дом ” для своего проекта-сайта. Крупному сайту, который интенсивно наполняет.. узнать больше

    Сервер Аренда

    Сервер аренда — это услуга, которая нужна особенно тем, кто имеет большой проект или сайт для безопасной и безотказной работы. Основные причины, .. узнать больше

    Виртуальный хостинг сайтов ✔️

    Ищете виртуальный хостинг сайтов ? Hostimul будет для вас верным спутником по организации вашего проекта онлайн. Увеличьте скорость с помощью веб-.. узнать больше

    Хостинг для wordpress Украина✔️

    Услуга » Хостинг для wordpress Украина » в Hostimul является наиболее востребованной в силу своей надежности и качества обслуживания. Управляемые .. узнать больше

    Надежный Хостинг ✔️

    Надежный хостинг доступен по адресу Hostimul.com по самым выгодным тарифам ! Владывая значительные средства в создание актуального и интересного с.. узнать больше

    Хостинг выделенный сервер

    Выбрать хостинг выделенный сервер для бизнеса не так просто, как кажется на первый взгляд. Одним из актуальных вариантов является выделенный серве.. узнать больше

    Хостинг пробный период✅

    Хостинг пробный период доступен в Hostimul.com на целый месяц с бесплатным доменом. Получите удобные услуги управления доменом вместе с учетной з.. узнать больше

    Купить Хостинг Для Сайта ✅

    Решили купить хостинг для сайта ? Вы пришли определенно по верному адресу ! Скорость сайта может сильно повлиять как на видимость вашей поисковой .. узнать больше

    Хостинг для интернет магазина

    Ищете хостинг для интернет магазина ? Hostimul будет для вас наиболее лучшим вариантом для безопасной и отказоустойчивой деятельности вашего проек.. узнать больше

    Хостинг бесплатный ✔️

    Выберите хостинг бесплатный для оптимизации вашего бизнеса. Наши хостинговые услуги также распространяют свои услуги на таких администраторов веб-.. узнать больше

    Vps в Сша ☑️

    Хотитн продвижения бизнеса онлайн ? Будем рады предложить вам лучшие серверные опции, которые выведут возможности бизнеса на новый уровень. Vps .. узнать больше

    Vps в Украине ☑️

    Vps в Украине стал самым популярным среди всех. Технология виртуализации используется службой хостинга, которая предоставляет частные вы.. узнать больше

    Vps в Германи ✅

    Vps Германи с использованием Hostimul.com означает, что вы можете быть уверены, что сможете использовать дополн.. узнать больше

    Лучший хостинг ☑️

    Хотите продвижение вашего проекта онлайн ? Для этого необходим лучший хостинг, которого вы найдете на Hostimul.com, являющийся лидером по хостинго.. узнать больше

    Аренда виртуального сервера ☑️

    Перед тем, как решитесь аренда виртуального сервера вам необходимо решить какой трафик ваш нужен. Виртуальный сервер это — хостинг-услуга сервер, .. узнать больше

    Выделенный сервер ☑️

    Выделенный сервер идеально подходит для высоконагруженных сайтов, в особенности для игровых порталов, для больших интернет магазинов с высокой пос.. узнать больше

    Купить хостинг ☑️

    Купить хостинг — это процесс не самый легкий и требует учет определенных аспектов. Очевидно, чтобы ваш сайт был скоростным и .. узнать больше

    Виртуальный Сервер ☑️

    Виртуальный сервер — это сервер, который совместно использует аппаратные и программные ресурсы с другими операционными систем.. узнать больше

    Vps в Москве ✅

    Заказать Vps в Москве через hostimul.com будет для вас очень выгодно и доступно. Независимо от того, устанавливается ли пользовательское приложен.. узнать больше

    Baranova 2869/35, Žižkov,
    130 00 Prague 3, Czechia

    © 2023 HOSTIMUL S.R.O. ВСЕ ПРАВА ЗАЩИЩЕНЫ

    Поиск по всей базе данных MySQL

    Возможно ли как то задать поиск по все базе данных, всех колонок всех таблиц? Задача просканировать базу данных на предмет eval . Подскажите пожалуйста можно ли реализовать такой поиск ?

    Отслеживать
    371 1 1 золотой знак 5 5 серебряных знаков 13 13 бронзовых знаков
    задан 5 ноя 2013 в 12:21
    1,269 3 3 золотых знака 17 17 серебряных знаков 35 35 бронзовых знаков

    хм, можно выбрать все таблицы, по каждой из таблице можно получить все столбцы, и уже дальше искать по ним 🙂 только это приходит на ум )

    5 ноя 2013 в 12:54

    а есть запрос, который получает все столбцы в таблице ? и можно ли его использовать в связке запросов ? Типа WHERE запрос на все столбцы

    5 ноя 2013 в 13:36
    делай полный дамп базы и дальше grep.
    5 ноя 2013 в 13:51

    2 ответа 2

    Сортировка: Сброс на вариант по умолчанию

    Нужно будет учесть, что некоторые колонки допустим varchar другие text и поиск должен осуществляться разными методами, где просто по маске, где полнотекстовый поиск. Выборку всех колонок всех таблиц сделать несложно

    SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME IN ( SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'название базы') 

    далее AND и можно реализовывать алгоритм поиска подстроки ‘eval’

    Отслеживать
    371 1 1 золотой знак 5 5 серебряных знаков 13 13 бронзовых знаков
    ответ дан 5 ноя 2013 в 15:17
    1,596 8 8 серебряных знаков 15 15 бронзовых знаков
    не парился, сделал дамп базы и законтрлэфил eval и тп. К сожалению ничего не нашел
    5 ноя 2013 в 15:27

    Почему к сожалению? Если есть проблема с выполнением какого-то стороннего кода, то поищите не только в базе данных но и в самих файлах, недавно так нашел в одном старом проекте несколько файлов с добавленном редиректе вначале. Советую глянуть на счет присутствия не только строки «eval», но также и «base64»

    5 ноя 2013 в 20:48

    та в том то и дело: нашел 200 мб вирусни на сайте, и она как-то стабильно раз в неделю попадает. Проверил базу, на систем, экзес и тп.. пусто, фсе файлы сайта антивирусником, ручным поиском, пусто. Пароли фтп меняю каждую неделю. В картинках искал вредоносный код, тоже все пусто. Не могу понять где дырка

    5 ноя 2013 в 21:15

    пиши хостерам, пусть у себя еще проверят, вполне возможно их ломают а там уже и до тебя добираются, пусть логи смотрят, кто файл вредоносных положил, когда, под каким пользователем и тд. Так же разумеется, свой комп проверь. И глянь на всякий случай в cron на хосте — вполне возможно что туда закинут функционал загрузки вредоносного кода раз в неделю скажем и тогда никакая смена паролей конечно уже будет неважна.

    5 ноя 2013 в 21:32

    @zippp, у меня похожая задача, только не ищу вредоносный код, а обычную строку, например, АБВГД. Не подскажите, как дополнить Ваш запрос ? Я попробовал, дописать в самый конец and column_name like ‘%АБВГД%’ , но мне кажется, что я ошибся

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *