2

私は最近、PDO で動作するクエリ結果の自動ページングと順序付けのためのクラスを作成しました。

MySQL テーブルからデータを取得する方法は次のとおりです。

$this->query = "SELECT _id, name, price, creationDate, isPublished FROM fruits";
$this->fetch_type = PDO::FETCH_ASSOC;
$this->result = $db->query($this->query);
$this->rows = $this->result->fetchAll($this->fetch_type);
$this->columns = empty($this->rows) ? array() : array_keys($this->rows[0]);

このようにして、列名を配列内に簡単に格納できます (まさにこれが必要です)。

var_dump($this->columns):

array
  0 => string '_id' (length=3)
  1 => string 'name' (length=4)
  2 => string 'price' (length=5)
  3 => string 'creationDate' (length=12)
  4 => string 'isPublished' (length=11)

ただし、フェッチ タイプが の場合、私のメソッドは機能しません。これはPDO::FETCH_OBJ、2D 配列ではなく、配列内のオブジェクトで作業しているためです。

var_dump($this->rows):

array
 0 => 
object(stdClass)[11]
  public '_id' => string '1' (length=1)
  public 'name' => string 'apple' (length=5)
  public 'price' => string '26.00' (length=5)
  public 'creationDate' => string '0000-00-00 00:00:00' (length=19)
  public 'isPublished' => string '1' (length=1)
 1 => 
object(stdClass)[12]
  public '_id' => string '2' (length=1)
  public 'name' => string 'banana' (length=11)
  public 'price' => string '15.00' (length=5)
  public 'creationDate' => string '0000-00-00 00:00:00' (length=19)
  public 'isPublished' => string '1' (length=1)
 2 => 
object(stdClass)[13]
  public '_id' => string '3' (length=1)
  public 'name' => string 'orange' (length=6)
  public 'price' => string '12.12' (length=5)
  public 'creationDate' => string '0000-00-00 00:00:00' (length=19)
  public 'isPublished' => string '1' (length=1)

  etc...

では、上記のような結果から列名を取得するにはどうすればよいでしょうか?

4

2 に答える 2

5

これに対する簡単な答えは、渡すアイテムを明示的にキャストすることです。これにより、配列は影響を受けませんが、オブジェクトは正しい型になります。array_keys()(array)

$this->columns = empty($this->rows) ? array() : array_keys((array) $this->rows[0]);
于 2012-05-29T12:27:26.837 に答える
4

getColumnMetaは列の名前を取得できます。これは、明らかに「名前」キーを含む連想配列を返します。

それで

$meta = $this->result->getColumnMeta(0); // 0 indexed so 0 would be first column
$name = $meta['name'];
于 2012-05-29T12:31:51.763 に答える