2012-03-23 73 views
1

下面是我試圖做到這一點的一些代碼,我使用mysql 5.0+和innodb引擎。 可以我使用getColumnMeta(實驗?)和如何使用它來獲取數據類型元數據?如何獲取字段數據類型和pdo中?

謝謝。

$types = array(
    PDO::PARAM_BOOL => 'bool', 
    PDO::PARAM_NULL  => 'null', 
    PDO::PARAM_INT  => 'int', 
    PDO::PARAM_STR  => 'string', 
    PDO::PARAM_LOB  => 'blob', 
); 

try{ 

$sql = 'SELECT COUNT(*) FROM subscriber,list_sub WHERE list_sub.ListID =? AND list_sub.SubID = subscriber.SubID '; 

$stmt = $conn->prepare($sql); 
$stmt->execute(array($list)); 
$meta = $stmt->getColumnMeta(0); 
var_dump($meta); 
} 
catch(PDOException $e) 
    { 
    die ($e->getMessage()."<a href='view.php' onClick='window.location.reload()'> Back</a>"); 
    } 
+1

http://php.net/manual/en/pdostatement.getcolumnmeta.php像文檔說 - 這是實驗性的,並非所有的PDO的驅動程序支持。所以...'也許'。 – 2012-03-23 03:09:59

+0

如何檢查個人col數據類型?謝謝你。 SELECT COUNT(LastName)FROM subscriber WHERE DATA_TYPE ='varchar' – 2012-03-23 03:21:22

+0

好吧,我明白了 – 2012-03-23 03:25:35

回答

0

我知道這個線程是1+歲,但如果其他人在其絆倒,因爲我有一個搜索,它可能是有用的。

我有一個PDO數據庫包裝類,我建立,這裏是我的方法在我的班級做這個。我不知道它是如何移植的,因爲我從來沒有使用Oracle,但它適用於我使用MySql的情況。這要求DBMS支持「SHOW COLUMNS FROM」,所以它應該支持任何DBMS。

可以看出,我使用try/catch塊來捕獲任何可能發生並記錄錯誤的PDO異常。

/** 
* @ getFieldType - gets the field data type for a specific field in a table. 
* 
* @ param type: text $table = The name oof a data table. 
* @ param type: text $field = A field in the data table. 
*/ 
public static function getFieldType($table, $field) { 
    $ret = false; 
    $sql = "SHOW COLUMNS FROM `$table` WHERE Field = '$field'"; 

    try { 
     $result = self::dbQueryRow($sql); 
     $ret = $result['Type']; 
    } catch (PDOException $e) { 
     self::logError($e, "getFieldType", $sql); 
    } 

    return $ret; 
} //End public static function getFieldType 

這裏使用的dbQueryRow和logError方法應該是不言自明的。

希望這是有益