繁体   English   中英

PDO 关联数组 - 返回关联

[英]PDO associative arrays - return associative

我有这个代码:

$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 语句来实现与数组 $languages 产生的结果相同的结果。 我尝试了一些不同的 fetch_styles。

我尝试了一些不同的风格,我可以得到:

[0] svenska
[1] engelska

但我想要:

[1] svenska
[2] engelska

(其中 1 和 2 是数据库中 id 的值)

我想我可以创建一个函数并用FETCH_FUNC调用它,但我不确定那会不会很好。

以上是最好/最干净的方法吗?

大家都忘记了

$sth->fetchAll(PDO::FETCH_KEY_PAIR);

不确定是否有更好的方法。 你可以试试这个吗?

$rows = $statement->fetchAll(PDO::FETCH_ASSOC);

$languages = array();

function getLangs($col, $row) {
     $languages[$col['id']] = $col['name'];
}

array_walk($rows, 'getLangs');

foreach 循环没有任何问题。 我实际上会使用你所拥有的。 很难比这更干净......

更新:

在仔细重新阅读您的问题后,您真正应该问的是您是否可以以不同格式返回结果的方式格式化您的 QUERY。

因此,您的正常 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 中执行此操作 我也建议反对它,即使你可以。 对于缩放表来说,这将是可怕的。 如果您的表是静态的,那么为什么不按照我刚刚提到的方式对其进行格式化呢? 为什么不将它放在包含文件中的静态 PHP 数组中?

我想你可能正在寻找$result = $sth->fetch(PDO::FETCH_ASSOC);

参考: http : //php.net/manual/en/pdostatement.fetch.php

[编辑] 哎呀来晚了:)

<?php
$dbhost = 'somehost';
$dbuser = 'someuser';
$dbpw = 'somepw';
$dbname = 'somename';
$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,];
$dsn = "mysql:host=$dbhost;dbname=$dbname;";
$pdo = new PDO($dsn, $dbuser, $dbpw, $options);

$data = $pdo->query("SELECT * FROM language")->fetchAll(\PDO::FETCH_UNIQUE);
var_dump($data);

FETCH_UNIQUE可以解决问题...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM