|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
php + mysql. Имеется произвольный запрос SQL (строка). Как быстрее всего получить список полей, возвращаемых этим запросом ? Необходимо учитывать, что запрос может возвращать пустой результат. В этом случае список полей тоже должен быть корректно получен. В идеале без выполнения запроса. Только путём его парсинга (не самостоятельно, конечно, а средствами MySQL). Команда "SHOW COLUMNS" работает только с таблицами и представлениями. Можно создать временную таблицу или представление и получить список полей, но это не лучший вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2015, 21:30 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Можно выполнить запрос с добавлением LIMIT 0 (или с заменой, если LIMIT в нем уже есть). В MySQL есть специальная оптимизация для LIMIT 0, которая делает именно то, что требуется - возвращает пустой набор данных с нужными полями. http://dev.mysql.com/doc/refman/5.5/en/limit-optimization.html LIMIT 0 quickly returns an empty set. This can be useful for checking the validity of a query. It can also be employed to obtain the types of the result columns if you are using a MySQL API that makes result set metadata available. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2015, 21:36 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Я не знаю, как получить имена столбцов из PDOStatemant. Всю жизнь только fetchAll(PDO::FETCH_ASSOC) использовал. Сейчас - приходится эквилибристикой заниматься... Согласно справке, fetch(PDO::FETCH_COLUMN|PDO::FETCH_GROUP) должен вернуть массивы значений для всех полей. У меня возвращает хрень какую-то. Без названий столбцов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2015, 22:11 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Согласно справке, fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP) должен вернуть массивы значений для всех полей. У меня возвращает хрень какую-то. Без названий столбцов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2015, 22:12 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Сейчас 3 дня буду этот fetch обсасывать. В гугле только mysqli упоминается, в справке - про извлечение столбцов ни слова. На какой-то фигне застрял конкретно. Бесит... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2015, 22:18 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
fetch(PDO::FETCH_OBJ) возвращает объект (имена полей = именам столбцов), но если добавть LIMIT 0, то возвращает false ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2015, 22:25 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Предварительный вывод: из PDOStatement имена полей для пустой выборки никак не вытащишь. А ведь даже в Access такая задача решает без проблем... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2015, 22:32 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
авторIt can also be employed to obtain the types of the result columns if you are using a MySQL API that makes result set metadata available. О каком таком API (которое получает метаданные о полях) здесь идёт речь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2015, 22:34 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Cyrax_02, авторВ идеале без выполнения запроса. "...prepare" ? не? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2015, 01:40 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
автор"...prepare" ? Вы у меня спрашиваете или я на форуме спрашиваю ? Выполняю prepare - дальше что ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2015, 02:44 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Похоже, о сложных вещах спрашиваю. Никто не знает... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2015, 03:05 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
авторМожно выполнить запрос с добавлением LIMIT 0 (или с заменой, если LIMIT в нем уже есть) Корректную замену выполнить очень непросто. Формат записи у LIMIT'а не один. Плюс слово "LIMIT" может присутствовать в составе строковых констант. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2015, 04:29 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
это не годится? http://php.net/manual/ru/pdostatement.getcolumnmeta.php в паре с http://php.net/manual/ru/pdostatement.columncount.php ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2015, 09:04 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
sxqэто не годится? http://php.net/manual/ru/pdostatement.getcolumnmeta.php в паре с http://php.net/manual/ru/pdostatement.columncount.php Не годится. Однозначно. Этот метод работает слишком примитивно, например, не разворачивает "COUNT(*)". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2015, 14:06 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Тьфу. Чего-то не то пишу. Смотря на "COUNT(*)", подумал о "SELECT *" Нужно попробовать. Только вот смущает "экспериментальный" характер функции... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2015, 14:10 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
вашу задачу она решает на отлично, вы хотите получить имена колонок - вы их получите, экспериментальная она по причине скорей всего из-за сложности определения типов данных, это определяется плохо, по крайней мере в MySql. Я пользуюсь этой функцией уже несколько лет, все прекрасно работает на всех последних версиях PHP ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 00:30 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
авторЯ пользуюсь этой функцией уже несколько лет, все прекрасно работает на всех последних версиях PHP Преимущество (PDOStatement::getColumnMeta()) перед (mysqli + fetch_fields()) - независимость от СУБД ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 05:03 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Cyrax_02авторЯ пользуюсь этой функцией уже несколько лет, все прекрасно работает на всех последних версиях PHP Преимущество (PDOStatement::getColumnMeta()) перед (mysqli + fetch_fields()) - независимость от СУБДМожно подумать, что у вас все SQL-запросы независимы от СУБД :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 10:52 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
авторМожно подумать, что у вас все SQL-запросы независимы от СУБД :) Промолчу... иначе придётся раскрыть свой инструментарий... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 14:18 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Cyrax_02автор"...prepare" ? Вы у меня спрашиваете или я на форуме спрашиваю ? Выполняю prepare - дальше что ? Ну, если использование PDO не критично, то дальше читаем : mysqli_prepare() + mysqli_stmt_result_metadata() вкратце: Если запрос, переданный в mysqli_prepare(), генерирует результирующую таблицу, mysqli_stmt_result_metadata() возвращает объект, с помощью которого можно получить описание этого результирующего набора. В частности, можно получить количество полей и описание каждого отдельного поля. т.е. для того чтобы получить метаданные "execute" выполнять не обязательно. Там есть 2 примера содержащих "prepare+ execute + metadata". Если закоментировать строчки с "execute", то результат не изменится. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2015, 01:42 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
авторт.е. для того чтобы получить метаданные "execute" выполнять не обязательно. Там есть 2 примера содержащих "prepare + execute + metadata". Если закоментировать строчки с "execute", то результат не изменится. А Ваш вариант - не то же самое, что prepare + execute(c LIMIT 0) + getColumnMeta ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 12:41 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Cyrax_02авторт.е. для того чтобы получить метаданные "execute" выполнять не обязательно. Там есть 2 примера содержащих "prepare + execute + metadata". Если закоментировать строчки с "execute", то результат не изменится. А Ваш вариант - не то же самое, что prepare + execute(c LIMIT 0) + getColumnMeta ? Кроме того что это "PDO" vs "mysqli"? По результату - скорее всего одно и то же - метаданные будут получены. Для варианта c использованием PDO : PDO::prepare и PDO::query возвращают PDOStatement, логично предположить что PDOStatement::getColumnMeta ( int $column ) можно использовать и с/после PDO::prepare без PDOStatement::query. Честно говоря, не пробовал (не было необходимости, а сейчас - облом). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2015, 00:45 |
|
PHP+MySQL: получить список полей произвольного SELECT-запроса
|
|||
---|---|---|---|
#18+
Вот как я решил (проверено php 5.6), может кому пригодится) : Получаем все имена полей таблицы "$tableName" ($this->pdo - ссылка на PDO (подключение к бд)): Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2017, 22:13 |
|
|
start [/forum/search_topic.php?author=%D0%9B%D0%BE%D1%88%D0%B0%D0%B4%D1%8C+%D0%91%D1%83%D0%B4%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 462ms |
total: | 649ms |
0 / 0 |