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

Posted

技术标签:

【中文标题】MySQL PDO fetchAll 作为具有整数索引的数组【英文标题】:MySQL PDO fetchAll as array with integer index 【发布时间】:2012-09-08 11:12:57 【问题描述】:

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

【问题讨论】:

您打算使用结果中的“id”字段吗? 【参考方案1】:

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

   <?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】:

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

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

【讨论】:

这只会获取列的第一个条目。我想要一次所有的条目。 不推荐使用链式调用,因为它会妨碍可读性并可能导致意外结果。另外,解决方法是错误的。【参考方案3】:

你的方法很好。虽然如果您不需要 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 的约束越少,处理时间就越短,最终会产生更好的结果。

【讨论】:

fetchAll(PDO::FETCH_ARRAY, 0); 第一列。 ^_^ @GiantofaLannister:已编辑。 FETCH_ARRAY 中没有列号。但基本上,只查询您需要的内容,如果您不需要 ID,请不要查询。就这么简单。 PDO::FETCH_ARRAY 是一个非标准的 PDO 常量。请参阅 php.net/manual/en/pdostatement.fetchall.php 和 php.net/manual/en/pdostatement.fetch.php 某些系统支持 PDO::FETCH_ASSOC。 PDO::FETCH_COLUMN 是首选。

以上是关于MySQL PDO fetchAll 作为具有整数索引的数组的主要内容,如果未能解决你的问题,请参考以下文章

PDO 循环并打印 fetchAll

如何让 PDO::FETCH_ASSOC 将整数作为整数返回? [复制]

PDO::fetchAll 与 PDO::fetch 循环

PDO fetchAll() - json_encode在使用JOIN时不起作用

PDO fetchAll 将键值对分组到 assoc 数组中

PDO fetchAll 返回空数组,但是可以显示count数量?