PHP-PDO从数据库中获取元数据

时间:2014-06-04 06:05:14

标签: metadata

我想通过表格'朋友'

从数据库中获取元数据
id name
1  Herbert
2  LG
3  Levins

以下是我试图获取数据的代码。

<?php

    $dsn = 'mysql:host=localhost;dbname=postgre';
$username = 'root';
$password = '';
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 

    $db = new PDO($dsn, $username, $password, $options);

 $stmt = $db->query("SELECT * FROM friends");
$cnt_columns = $stmt->columnCount();
for($i = 0; $i < $cnt_columns; $i++) {
  $metadata = $stmt->getColumnMeta($i);
  var_dump($metadata);
}

    ?>

执行代码:时,显示

   array
  'native_type' => string 'LONG' (length=4)
  'pdo_type' => int 2
  'flags' => 
    array
      empty
  'table' => string 'friends' (length=7)
  'name' => string 'id' (length=2)
  'len' => int 11
  'precision' => int 0

array
  'native_type' => string 'VAR_STRING' (length=10)
  'pdo_type' => int 2
  'flags' => 
    array
      empty
  'table' => string 'friends' (length=7)
  'name' => string 'name' (length=4)
  'len' => int 60
  'precision' => int 0

到这里,它正在给出正确的行数,但我需要显示结果,因为它在我的数据库中看起来像

输出:

id name
1  Hebert
2  LG
3  Levins

如何使用元数据获取我的所有字段,因为它就像数据库中的表一样。

1 个答案:

答案 0 :(得分:1)

使用columnCount

$stmt = $db->query("SELECT * FROM friends");
$cnt_columns = $stmt->columnCount();
for($i = 0; $i < $cnt_columns; $i++) {
  $metadata = $stmt->getColumnMeta($i);
  var_dump($metadata);
}

顺便说一下,getColumnMeta experimental 。不建议使用。你为什么要用它?


对于所需的输出,您不需要元数据。只需循环结果:

$sql = "SELECT * FROM friends";
$stmt = $db->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll();

// field names
if(count($result) > 0) {
   foreach($result[0] as $k => $v) {
     if(!is_int($k)) {
       echo $k . "\t";
     }
   }
}
echo PHP_EOL;

// data
foreach ($result as $row) {
    foreach($row as $k => $v) {
      if(!is_int($k)) {
        echo $row[$k] . "\t";
      }
    }
    echo PHP_EOL;
}