PDOStatement::getColumnMeta

(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0)

PDOStatement::getColumnMeta Возвращает метаданные столбца в результирующей таблице

Описание

array PDOStatement::getColumnMeta ( int $column )
Внимание

Эта функция является ЭКСПЕРИМЕНТАЛЬНОЙ. Поведение этой функции, ее имя и относящаяся к ней документация могут измениться в последующих версиях PHP без уведомления. Используйте эту функцию на свой страх и риск.

Возвращает метаданные столбца результирующей таблицы в виде ассоциативного массива. Индексация столбцов начинается с 0.

Внимание

Не все PDO драйверы поддерживают PDOStatement::getColumnMeta().

Список параметров

column

Индекс (начиная с 0) столбца результирующего набора.

Возвращаемые значения

Возвращает ассоциативный массив, содержащий следующие значения метаданных:

Метаданные столбца
Имя Значение
native_type Внутренний тип PHP, в котором будет представлено значение столбца.
driver:decl_type SQL тип в котором значение столбца хранится в базе данных. Если значение столбца результирующей таблицы было возвращено из функции, PDOStatement::getColumnMeta() не будет определять этот тип.
flags Какие-либо флаги, установленные для столбца.
name Имя столбца в том виде, в котором его вернула СУБД.
table Имя таблицы базы данных, содержащей этот столбец.
len Размер поля столбца. Как правило, для типов, отличных от чисел с плавающей запятой, это значение равно -1.
precision Числовая точность значений этого поля. Как правило, для типов, отличных от чисел с плавающей запятой, это значение равно 0.
pdo_type PDO тип значения столбца в виде одной из констант PDO::PARAM_*.

Возвращает FALSE в случаях, когда указанного столбца нет в результирующей таблице, а также если не существует самого результирующего набора.

Список изменений

Версия Описание
5.2.3 Поле table

Примеры

Пример #1 Извлечение метаданных столбца

В следующем примере показаны результаты извлечения метаданных одного столбца сгенерированного функцией COUNT драйвера PDO_SQLITE.

<?php
$select 
$DB->query('SELECT COUNT(*) FROM fruit');
$meta $select->getColumnMeta(0);
var_dump($meta);
?>

Результат выполнения данного примера:

array(6) {
  ["native_type"]=>
  string(7) "integer"
  ["flags"]=>
  array(0) {
  }
  ["name"]=>
  string(8) "COUNT(*)"
  ["len"]=>
  int(-1)
  ["precision"]=>
  int(0)
  ["pdo_type"]=>
  int(2)
}

Смотрите также

  • PDOStatement::columnCount() - Возвращает количество столбцов в результирующем наборе
  • PDOStatement::rowCount() - Возвращает количество строк, модифицированных последним SQL запросом

Коментарии

I found a short discussion related to this function at 
http://www.sitepoint.com/forums/showthread.php?t=497257

I haven't tried it (yet?) but hopefully someone can find it useful.
2008-02-29 11:21:22
http://php5.kiev.ua/manual/ru/pdostatement.getcolumnmeta.html
This method is supported in the MySQL 5.0+ driver.  It can be used for object hydration:

<?php

$pdo_stmt 
$dbh->execute('SELECT discussion.id, discussion.text, comment.id, comment.text FROM discussions LEFT JOIN comments ON comment.discussion_id = discussion.id');

foreach(
range(0$pdo_stmt->columnCount() - 1) as $column_index)
{
 
$meta[] = $pdo_stmt->getColumnMeta($column_index);
}

while(
$row $pdo_stmt->fetch(PDO::FETCH_NUM))
{
  foreach(
$row as $column_index => $column_value)
  {
   
//do something with the data, using the ids to establish the discussion.has_many(comments) relationship.
 
}
}

?>

If you are building an ORM, this method is very useful to support more natural SQL syntax.  Most ORMs require the column names to be aliases so that they can be parsed and turned into objects that properly represent has_one, has_many, many_to_many relationships.
2009-01-23 12:38:44
http://php5.kiev.ua/manual/ru/pdostatement.getcolumnmeta.html
Автор:
native_type has the following mapping for MySQL:
(tested in PHP 5.4, MySQL 5.7)

INT(11) (PKs) => LONG
TINYINT(4)    => TINY
DOUBLE        => DOUBLE
VARCHAR       => VAR_STRING
CHAR          => STRING
DATE          => DATE
Functions     => VAR_STRING
- DATEFORMAT()
- CONCAT()
2019-08-03 14:57:44
http://php5.kiev.ua/manual/ru/pdostatement.getcolumnmeta.html
I was able to successfully pull off basic type conversion for integer and float values in PDO.

NULL values were returning as null, but integers and floats weren't, so I decided to go with a simple solution.

It's not tested on all database types, so if you think it needs improvement, let me know (my twitter is "francanobr")

<?php

// Returns the contents of $stm (PDO Statement)
// as an associative array, with correct native types
// for integers, nulls, and floats

$array = [];

while (
$fila $stm->fetch(\PDO::FETCH_ASSOC)) {

   
$i 0;
    foreach (
$fila as $key => $value) {
       
$columnMeta $stm->getColumnMeta($i);

        switch (
$columnMeta['native_type']) {
            case 
'LONG':
            case 
'TINY':
               
$fila[$key] = intval($value);
                break;
            case 
'DOUBLE':
               
$fila[$key] = floatval($value);
                break;
        }

       
$i++;
    }

   
$array[] = $fila;
}

return 
$array;
?>

The code sample is part of a function, the function declaration is not included, evaluate how to integrate it with your app.
2019-08-13 13:05:35
http://php5.kiev.ua/manual/ru/pdostatement.getcolumnmeta.html
I recently added a note to a small function that went through the results of PDOStatement::fetch and mapped columns to integer or float types.

I forgot to test for columns that can have a null value!

I'm updating the code here, sorry.

This website doesn't let me edit the original comment, so I'm just gonna link to a gist in case it needs even further fixes.

https://gist.github.com/AeonFr/db3b2a8a95753076d9e4da42d29365d2

I basically added this code:

<?php
if ($value === null) {
   continue;
}
?>
2019-08-16 12:32:42
http://php5.kiev.ua/manual/ru/pdostatement.getcolumnmeta.html
This method is supported by sql server too (at least the version of the PDO driver 5.7.1)

Example:

array(8) {
  ["flags"]=>
  int(0)
  ["sqlsrv:decl_type"]=>
  string(12) "int identity"
  ["native_type"]=>
  string(6) "string"
  ["table"]=>
  string(0) ""
  ["pdo_type"]=>
  int(2)
  ["name"]=>
  string(8) "IdCompra"
  ["len"]=>
  int(10)
  ["precision"]=>
  int(0)
}
2020-03-10 22:49:16
http://php5.kiev.ua/manual/ru/pdostatement.getcolumnmeta.html
Searching for LONGLONG in php-src: 
   
$datatypes = array(
        MYSQLI_TYPE_TINY => "TINY",
        MYSQLI_TYPE_SHORT => "SHORT",
        MYSQLI_TYPE_LONG => "LONG",
        MYSQLI_TYPE_FLOAT => "FLOAT",
        MYSQLI_TYPE_DOUBLE => "DOUBLE",
        MYSQLI_TYPE_TIMESTAMP => "TIMESTAMP",
        MYSQLI_TYPE_LONGLONG => "LONGLONG",
        MYSQLI_TYPE_INT24 => "INT24",
        MYSQLI_TYPE_DATE => "DATE",
        MYSQLI_TYPE_TIME => "TIME",
        MYSQLI_TYPE_DATETIME => "DATETIME",
        MYSQLI_TYPE_YEAR => "YEAR",
        MYSQLI_TYPE_ENUM => "ENUM",
        MYSQLI_TYPE_SET    => "SET",
        MYSQLI_TYPE_TINY_BLOB => "TINYBLOB",
        MYSQLI_TYPE_MEDIUM_BLOB => "MEDIUMBLOB",
        MYSQLI_TYPE_LONG_BLOB => "LONGBLOB",
        MYSQLI_TYPE_BLOB => "BLOB",
        MYSQLI_TYPE_VAR_STRING => "VAR_STRING",
        MYSQLI_TYPE_STRING => "STRING",
        MYSQLI_TYPE_NULL => "NULL",
        MYSQLI_TYPE_NEWDATE => "NEWDATE",
        MYSQLI_TYPE_INTERVAL => "INTERVAL",
        MYSQLI_TYPE_GEOMETRY => "GEOMETRY",
    );
2021-07-19 06:20:50
http://php5.kiev.ua/manual/ru/pdostatement.getcolumnmeta.html

    Поддержать сайт на родительском проекте КГБ