PHP / MySQL - Как вы определяете имена полей из данного результата запроса? - PullRequest
4 голосов
/ 05 ноября 2008

Учитывая набор результатов, как я могу определить фактические имена полей, указанных в запросе (НЕ их псевдонимы).

$query = "SELECT first AS First_Name, last AS Last_Name FROM people";
$dbResult = mysql_query($query);

$fieldCount = mysql_num_fields($dbResult);
for ($i=0; $i<$fieldCount; $i++) {          
    // Set some values
    $fieldName = mysql_field_name($dbResult, $i);
}

Этот пример возвращает имена полей, но в этом примере он возвращает псевдоним «First_Name» вместо фактического имени поля «first».

Можно ли получить фактическое имя поля из такого запроса. Особенно, если я пишу функцию и не знаю, какой запрос на нее будет брошен.

Ответы [ 7 ]

11 голосов
/ 05 ноября 2008

Если вы используете MySQLi:

http://www.php.net/manual/en/mysqli-result.fetch-field.php

Объект поля имеет свойство "orgname".

«Классическая» эквивалентная функция MySQL не возвращает исходные имена столбцов.

10 голосов
/ 05 ноября 2008

Краткий ответ: нет.

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

1 голос
/ 05 ноября 2008

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

выберите column_a + column_b как order_total из заказов;

Вы хотите сказать, что хотите знать, что исходный запрос был column_a + column b ??

если это так, вам, вероятно, нужно написать анализатор запросов или отключить его от Интернета.

Я думаю, что реализация этого выходит за рамки вашего вопроса, хотя:)

0 голосов
/ 05 ноября 2008

Если вы пытаетесь написать какую-то функциональность, чтобы вы знали, какие поля выбираются для обработки обновлений - единственный способ сделать это правильно - это представить интерфейс без кода SQL для приведенного выше кода и управлять всем SQL само поколение. Это называется уровнем абстракции данных.

0 голосов
/ 05 ноября 2008

если у вас есть доступ к строке запроса, вы можете использовать регулярное выражение для его анализа. Я не мастер регулярных выражений, но вы могли бы разбить строку, посмотрев на текст между «select» и «from», а затем захватить все имена полей как

 field FieldAlias

или

 field as FieldAlias
0 голосов
/ 05 ноября 2008

Если вы не против сделать второй запрос (и используете MySQL 5 или выше), вы можете запросить information_schema для имен. Проверьте MySQL Reference для деталей:

ПОКАЗАТЬ КОЛОННЫ ОТ tbl_name;

0 голосов
/ 05 ноября 2008

Я не уверен на 100% в этом, но я бы сказал: нет пути.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...