如何仅在一个数组中从数据库返回值

时间:2018-03-28 16:39:41

标签: php arrays return-value

我一直在寻找配置/详细信息文件的解决方案。我发现this解决方案很有趣,但我想从数据库中检索它们而不是硬编码。

我也是PDO的新手,但我现在的解决方案如下(config.php):

try {
    $db = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', 'user', 'pwd');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $db->query("SELECT name, value FROM config");
    $configs = $stmt->fetchAll();

    return [
        array_column($configs, 'value', 'name')
    ];

} catch(PDOException $e) {
    echo "Error: ".$e->getMessage();
}

然后我收到这样的回复:

Array ( [0] => Array ( [SITENAME] => Pionérhytta [MAXGUESTS] => 5 ) )

我需要像这样编写以获取价值(index.php):

<?php $config = include('../config/config.php'); ?>
...
<?=$config[0]['SITENAME']?>

这有效,但我想删除[0]并编写$ config ['SITENAME']来获取值。

有没有解决方案?

事先,感谢您的帮助

2 个答案:

答案 0 :(得分:4)

您的array_column()会返回一个关联数组。没有必要将它包装在另一个数组中:

return array_column($configs, 'value', 'name');

答案 1 :(得分:1)

使用fetchAll()进行工作的另一个解决方案,使用PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC的组合,可以获取SQL语句的结果,第一列作为键,其余值作为价值......

    $stmt = $db->query("SELECT name, value FROM config");
    $configs = $stmt->fetchAll(PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC);

    return $configs;