PHP 7.4.0RC2 Released!

PDOStatement::getColumnMeta

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

PDOStatement::getColumnMeta Retourne les métadonnées pour une colonne d'un jeu de résultats

Description

public PDOStatement::getColumnMeta ( int $column ) : array

Récupère les metainformations pour une colonne d'un jeu de résultats dans un tableau associatif.

Avertissement

Tous les drivers PDO ne supportent pas la fonction PDOStatement::getColumnMeta().

Les pilotes suivant implémente cette méthode :

Liste de paramètres

column

Le nom de la colonne dans le jeu de résultats.

Valeurs de retour

Retourne un tableau associatif contenant les valeurs suivantes représentant les metainformations pour une colonne :

Metainformations d'une colonne
Nom Valeur
native_type Le type natif PHP utilisé pour représenter la valeur de la colonne.
driver:decl_type Le type SQL utilisé pour représenter la valeur de la colonne dans la base de données. Si la colonne du jeu de résultats est le résultat d'une fonction, cette valeur n'est pas retournée par la fonction PDOStatement::getColumnMeta().
flags N'importe quelle balise définie pour cette colonne.
name Le nom de cette colonne, comme retourné par la base de données.
table Le nom de la table de cette colonne, tel que retourné par la base de données.
len La longueur de cette colonne. Normalement, -1 pour les types autres que les nombres décimaux à virgule flottante.
precision La précision numérique pour cette colonne. Normalement, 0 pour les types autres que les nombres décimaux à virgule flottante.
pdo_type Le type de cette colonne comme représenté par la constante PDO::PARAM_*.

Retourne FALSE si la colonne demandée n'existe pas dans le jeu de résultats, ou si aucun jeu de résultats n'existe.

Historique

Version Description
5.4.0 Ajout de la méthode pour le driver PDO_DBLIB
5.2.3 champs table

Exemples

Exemple #1 Récupération des metainformations pour une colonne

L'exemple suivant montre le résultat de la récupération des metainformations pour une colonne générée par une fonction (COUNT) dans un pilote PDO_SQLITE.

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

L'exemple ci-dessus va afficher :

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

Voir aussi

add a note add a note

User Contributed Notes 5 notes

up
10
colin at fusionbox dot com
10 years ago
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.
up
3
asohn aircanopy net
11 years ago
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.
up
1
Rodrigo Silva
1 month ago
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()
up
0
frankno dot 94 at gmail dot com
1 month ago
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;
}
?>
up
-1
frankno dot 94 at gmail dot com
1 month ago
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.
To Top