Intereting Posts
Что такое «необработанный HTTP-заголовок»? В чем разница между «HTTP-заголовком» и «сырым HTTP-заголовком»? PHP, создающий многомерный массив потоков сообщений из многомерного массива (IMAP) echo user in view from session code ignitter получение результатов MySQL в виде массива PHP Предупреждение: mysql_query (): 3 не является допустимым ресурсом MySQL-Link Налоговый класс «Нулевая ставка» для каждой роли пользователя для определенных идентификаторов продукта Пул соединений в PHP В окне Chrome отобразится окно выбора флажка. Как сохранить Node.js от разделения сообщений сокетов на более мелкие куски CodeIgniter 3.x – Перезагрузка просмотра с помощью другого CSS-файла с использованием пользовательского ввода WordPress Woocommerce Советы с PHP-кодом Doctrine 2: Error: Class ".. \ .." не имеет поля или ассоциации с именем "…" BigQuery Ошибка InsertAll: записей в приложении данных таблицы нет Класс «MongoClient» не найден Включить PHP-файл в файл HTML

Как получить «имена полей» с помощью PHP ADOdb?

Я использую PHP ADOdb, и я могу получить набор результатов:

$result = &$db->Execute($query); 

Как получить имена полей из одной строки и прокрутить ее?

(Я использую базу данных доступа, если это имеет значение.)

    Это будет зависеть от вашего режима выборки – если вы установитеFetchMode на ADODB_FETCH_NUM (возможно, по умолчанию), каждая строка содержит плоский массив столбцов. Если вы установилиFetchMode в ADODB_FETCH_ASSOC, вы получите ассоциативный массив, в котором вы можете получить доступ к каждому значению с помощью ключа. Из документации ADODB взято следующее: http://phplens.com/lens/adodb/docs-adodb.htm#ex1

     $db->SetFetchMode(ADODB_FETCH_NUM); $rs1 = $db->Execute('select * from table'); $db->SetFetchMode(ADODB_FETCH_ASSOC); $rs2 = $db->Execute('select * from table'); print_r($rs1->fields); # shows array([0]=>'v0',[1] =>'v1') print_r($rs2->fields); # shows array(['col1']=>'v0',['col2'] =>'v1') 

    Чтобы выполнить цикл результатов:

     $result = &$db->Execute($query); foreach ($result as $row) { print_r($row); } 

    Небольшое улучшение решения, отправленного @thetaiko.

    Если вы ТОЛЬКО нуждаетесь в именах полей, добавьте LIMIT 1 в конец вашего оператора select (как показано ниже). Это скажет серверу отправить вам одну строку с именами столбцов, а не отправлять вам всю таблицу.

     SELECT * FROM table LIMIT 1; 

    Я работаю с таблицей, содержащей 9.1M записей, поэтому это незначительное изменение значительно ускоряет запрос!

    Это функция, которую я использую для возврата массива полей – я убрал некоторые дополнительные материалы, которые, например, позволяют ему работать с другими БД, чем MySQL.

     function getFieldNames($strTable, $cn) { $aRet = array(); # Get Field Names: $lngCountFields = 0; $strSQL = "SELECT * FROM $strTable LIMIT 1;"; $rs = $cn->Execute($strSQL) or die("Error in query: \n$strSQL\n" . $cn->ErrorMsg()); if (!$rs->EOF) { for ($i = 0; $i < $rs->FieldCount(); $i++) { $fld = $rs->FetchField($i); $aRet[$lngCountFields] = $fld->name; $lngCountFields++; } } $rs->Close(); $rs = null; return $aRet; } 

    Изменить: просто указать, что, как я уже сказал, я убрал некоторые дополнительные вещи, и поэтому проверка EOF больше не нужна в приведенной выше, уменьшенной версии.

    Я сначала попытался использовать MetaColumnNames , но дал разные результаты в VisualPHPUnit и фактическом сайте, работая с одного и того же сервера, поэтому в итоге я сделал что-то вроде этого:

     $sql = "select column_name, column_key, column_default, data_type, table_name, table_schema from information_schema.columns"; $sql .= ' where table_name="'.$table.'" and table_schema="'.$database_name.'"'; $result = $conn->Execute($sql); while($row = $result->fetchRow()) { $out[] = strToUpper($row['column_name']); } 

    Я думаю, что он должен работать с mysql, mssql и postgres. Преимущество этого в том, что вы можете получить имена столбцов, даже если запрос из таблицы возвращает пустой набор.

    Если вам нужны имена Coloumn даже для пустых таблиц или для объединений в нескольких таблицах, используйте это:

     $db->Execute("SELECT ......."); // FieldTypesArray - Reads ColoumnInfo from Result, even for Joins $colInfo = $res->FieldTypesArray(); $colNames = array(); foreach($colNames as $info) $colInfo[] = $info->name;