我有一个有两列的表。表: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开始。对我来说无关紧要。我试着寻找这样一个可能的问题,但这些问题似乎与我的问题无关。
答案 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();