[英]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.