如何获取MySQL int字段的长度

时间:2013-11-22 13:54:31

标签: php mysql pdo

我有一个包含不同长度的int字段的MySQL表:

MySql mediumint and tinyint fields of different lenght

如何找出(nav_parent = 4, nav_show = 2, nav_order = 2)的长度 使用PHP PDO?

3 个答案:

答案 0 :(得分:2)

这适用于MySQL,非实验性

 $result = $this->query('SHOW COLUMNS FROM your_table_name', PDO::FETCH_ASSOC);

现在您有以下信息:

[Field] => yourfieldname
[Type] => int(10)
[Null] => NO
[Key] => PRI
[Default] => 
[Extra] => auto_increment

您可以提取长度 [类型] => int(10)喜欢

preg_match('/\d+/', $col['Type'], $len); // gives you the number

整个例子:

$result = $pdo->query('SHOW COLUMNS FROM youTableName');

$columLen = array();

foreach($result as $key => $col){

  preg_match('/\d+/', $col['Type'], $len); // get the number out of 'int(10)'
  $len = (isset($len[0]))? $len[0] : '';   // is there a length? 
  $fieldname = $col['Field'];              // name of the column
  $columLen[$fieldname]  = $len;           // save it in array 
}

print_r($columLen);

输出:

Array
(
  [nav_parent] => 4
  [nav_show] => 1
  [nav_order] => 2
)

<强>注意: 某些字段类型(如日期,日期时间或文本)不会显示值lenght。 示例:时间戳类型的字段将显示“[Type] =&gt; timestamp”,而不是“[Type] =&gt; timestamp(12)”

答案 1 :(得分:1)

SELECT CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE FROM information_schema.columns WHERE TABLE_NAME = 'your_table_name'

了解更多信息check here

答案 2 :(得分:1)

getColumnMeta实验方法。

中提供的示例似乎显示了您的目标
<?php
$select = $DB->query('SELECT COUNT(*) FROM fruit');
$meta = $select->getColumnMeta(0);
var_dump($meta);
?>

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

}