6

我有一个有两列的表。表: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 开始。这对我来说并不重要。我尝试搜索这样一个可能的问题,但它们似乎都与我的问题无关。

4

3 回答 3

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 的约束越少,处理时间就越短,最终会产生更好的结果。

于 2012-09-16T07:26:37.160 回答
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
?>
于 2012-09-15T16:25:23.740 回答
0

您的解决方案没问题,您也可以调用fetchColumn()而不是fetchAll(). 如果您链接调用,它将如下所示:

$entries = $dbh->query("SELECT ctg FROM fruit")->fetchColumn();
于 2012-09-15T16:39:56.050 回答