MySQL PDO fetchAll为具有整数索引的数组

时间:2012-09-15 16:01:12

标签: php pdo pdostatement

我有一个有两列的表。表:ctgtable和列:idctg。由于我完全从之前的 mysql_* 函数转移到PDO,因此我面临一些愚蠢错误(或者可能缺乏知识)。

问题

我想将整个表的ctg列(总共最多20行)选择为具有整数索引的数组。

我的方法

我认为最接近的解决方案是:

<?php
    $sth = $dbh->prepare("SELECT id, ctg FROM ctgtable");
    $sth->execute();
    /* Fetch all of the values of the second column */
    $result = $sth->fetchAll(PDO::FETCH_COLUMN, 1);
    var_dump($result);
?>

对于相同的结果,还有其他更短/更好的选择吗?或者这是获取结果的最佳/唯一可能方法。

样本表

id      ctg
01     movie
27       tv
64     sports

样本结果

Array( 1 => "tv",
    2 => "movie",
    3 => "anime",
    4 => "game",
    5 => "telugu"
);

索引可能从0开始,也可能不从0开始。对我来说无关紧要。我试着寻找这样一个可能的问题,但这些问题似乎与我的问题无关。

3 个答案:

答案 0 :(得分:6)

你拥有的方法很好。虽然如果您不需要ID,为什么还需要查询它?

<?php
    $sth = $dbh->prepare("SELECT ctg FROM ctgtable");
    $sth->execute();
    /* Fetch all of the values in form of a numeric array */
    $result = $sth->fetchAll(PDO::FETCH_ARRAY);
    var_dump($result);
?>

对MySQL的限制越少,处理时间越短,最终会产生更好的结果。

答案 1 :(得分:2)

您可以简单地执行以下操作

   <?php
    //connect to db    

    $array = array();//define array

    $query = "SELECT * FROM ctgtable";    
    $result = $pdo->prepare($query);
    $result->execute();

   while ($row = $result->fetch()) {
      $id =  $row['id'];
      $ctg = $row['ctg'];        
      $array[$id] = $ctg;        
  }

 print_r($array);
 //close connection
?>

答案 2 :(得分:0)

您拥有的解决方案没问题,您也可以拨打fetchColumn()而不是fetchAll()。如果您锁定了呼叫,它将如下所示:

$entries = $dbh->query("SELECT ctg FROM fruit")->fetchColumn();