我有这样的代码:
$dbInstance = DB_Instance::getDBO();
$statement = $dbInstance->prepare("SELECT id, name FROM language ORDER BY id");
$statement->execute();
$rows = $statement->fetchAll();
//Create associative array wuth id set as an index in array
$languages = array();
foreach($rows as $r) {
$languages[$r['id']] = $r['name'];
}
return $languages;我不知道如何使用PDO-statement来获得与数组$languages相同的结果。我尝试过一些不同的fetch_styles。
我尝试了一些不同的风格,我可以得到这样的结果:
[0] svenska
[1] engelska但我想要:
[1] svenska
[2] engelska(其中1和2是数据库中id的值)
我想我可以创建一个函数,然后用FETCH_FUNC调用它,但我也不确定这是否会很好。
以上是最好的/最干净的方法吗?
发布于 2013-03-21 00:07:43
我不确定有没有更好的办法。你可以试试这个吗?
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
$languages = array();
function getLangs($col, $row) {
$languages[$col['id']] = $col['name'];
}
array_walk($rows, 'getLangs');foreach循环没有任何问题。我真的会用你所拥有的。很难比这更干净了.
更新:
仔细重读你的问题之后,你真正应该问的是,你是否可以用一种不同的格式来格式化你的查询结果。
返回普通SELECT查询的方式如下所示:
+----+----------+
| id | name |
+----+----------+
| 1 | svenska |
| 2 | engelska |
| .. | ... |
| .. | ... |
+----+----------+
$row = array(
row_1 => array(
id => "1",
name => "svenska"
),
row_2 => array(
id => "2",
name => "engelska"
),
row_3 => array(
id => "...",
name => "..."
),
row_4 => array(
id => "...",
name => "..."
)
)
$row[$row_number][$column_name] = $value您需要的是以某种方式返回查询结果,如下所示:
// Query result is only one row, with each 'id' as column name
// And the 'name' from the same row as it's value...
+---------+----------+-----+-----+-----+
| 1 | 2 | ... | ... | ... |
+---------+----------+-----+-----+-----+
| svenska | engelska | ... | ... | ... |
+---------+----------+-----+-----+-----+
$row = array(
row_1 => array(
1 => "svenska",
2 => "engelska",
... => "...",
... => "...",
... => "..."
)
)
$languages = $row[row_1];
$languages[$id] = $name;老实说,我不完全确定你能在SQL中使用do this。我也会建议你不要这么做,即使你能做到。对于伸缩表来说,这将是可怕的。如果您的表是静态的,为什么不以我刚提到的方式开始格式化它呢?为什么不把它放在一个包含文件的静态PHP数组中呢?
发布于 2014-02-14 03:50:59
每个人都忘记了
$sth->fetchAll(PDO::FETCH_KEY_PAIR);发布于 2013-03-21 00:00:37
我想你可能是在找$result = $sth->fetch(PDO::FETCH_ASSOC);
参考:http://php.net/manual/en/pdostatement.fetch.php
编辑oops to late :)
https://stackoverflow.com/questions/15512861
复制相似问题