如何使用PDO确定列类型?

时间:2010-07-01 12:40:13

标签: php database types pdo

从PDO读取数据时,我需要一种方法来确定数据库列的类型(varchar / numeric / date / ...)。

从DB中获取值时,无论表列的实际类型如何,PDO都只生成字符串值。

是否有任何非驱动程序的特定方式来获取此信息?我知道有SQL语句可以检索任何给定表的类型,但我更喜欢更通用的解决方案。

编辑: PDOStatement :: getColumnMeta()对我没用,因为我目前使用的PDO驱动程序(Oracle)不支持它。

6 个答案:

答案 0 :(得分:6)

看看这个方法:PDOStatement->getColumnMeta

答案 1 :(得分:3)

这就是我在WraPDO课程中的表现:

$tomet = $sth->getColumnMeta($column_index);
$tomet['type'] = $this->_translateNativeType($tomet['native_type']);

private function _translateNativeType($orig) {
    $trans = array(
        'VAR_STRING' => 'string',
        'STRING' => 'string',
        'BLOB' => 'blob',
        'LONGLONG' => 'int',
        'LONG' => 'int',
        'SHORT' => 'int',
        'DATETIME' => 'datetime',
        'DATE' => 'date',
        'DOUBLE' => 'real',
        'TIMESTAMP' => 'timestamp'
    );
    return $trans[$orig];
}

$ sth:PDOStatement->getColumnMeta

答案 2 :(得分:2)

它被标记为“实验性”,但PDOStatement->getColumnMeta方法看起来会像你想要的那样。

答案 3 :(得分:2)

我刚才写了一个函数,它提取了表列信息。我最终做了这样的事情:

SHOW COLUMNS FROM <table> WHERE Field = ?

对于典型的主键,产生这个:

+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
+-------+---------+------+-----+---------+----------------+

然后我将输出解析为可用的数组。但是,这是PHP 5.1.0之前的版本。现在你可以使用PDOStatement->getColumnMeta

答案 4 :(得分:0)

如果您正在使用Oracle:

select COLUMN_NAME,
       DATA_TYPE,
       DATA_LENGTH,
       DATA_PRECISION,
       DATA_SCALE
from user_tab_cols
where table_name = '<Table Name>'
order by column_id

但它不便携

许多SQL风格也有

DESCRIBE <Table Name>

答案 5 :(得分:0)

如果您正在使用Postgres:

select
    CHARACTER_MAXIMUM_LENGTH,
    COLUMN_NAME,
    IS_NULLABLE,
    COLUMN_DEFAULT,
    NUMERIC_PRECISION,
    NUMERIC_SCALE,
    UDT_NAME 
from
    INFORMATION_SCHEMA.COLUMNS 
where
    TABLE_NAME='table_name'