簡體   English   中英

如何使用PDO確定列類型?

[英]How can I determine the column type with PDO?

當從具有PDO的DB讀取時,我需要一種方法來確定數據庫列的類型(varchar / numeric / date / ...)。

從DB中獲取值時,無論表列的實際類型如何,PDO都只生成字符串值。

是否有任何非驅動程序的特定方式來獲取此信息? 我知道有SQL語句可以檢索任何給定表的類型,但我更喜歡更通用的解決方案。

編輯: PDOStatement :: getColumnMeta()對我沒用,因為我目前使用的PDO驅動程序(Oracle)不支持它。

看看這個方法: PDOStatement-> getColumnMeta

這就是我在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

它標記為“實驗性”,但PDOStatement->getColumnMeta方法看起來會像你想要的那樣。

我剛才寫了一個函數,它提取了表列信息。 我最終做了這樣的事情:

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

如果您正在使用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>

如果您正在使用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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM