MySQL PDO fetchAll 作为具有整数索引的数组
Posted
技术标签:
【中文标题】MySQL PDO fetchAll 作为具有整数索引的数组【英文标题】:MySQL PDO fetchAll as array with integer index 【发布时间】:2012-09-08 11:12:57 【问题描述】:我有一个有两列的表。表:ctgtable
和列:id
和 ctg
。由于我完全从以前的 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::FETCH_ASSOC 将整数作为整数返回? [复制]
PDO fetchAll() - json_encode在使用JOIN时不起作用