【问题标题】:Modify and add to MySQL result修改并添加到 MySQL 结果
【发布时间】:2019-03-11 14:07:12
【问题描述】:

如何将自定义键值对添加到现有 SQL 结果?

<?php
    require_once "dbaccess.php";

    $json = array();
    $access = new DatabaseAccess();
    $sql = $access->Connect();
    $stmt = $sql->prepare("select * from people");
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    

    foreach($result as $key => $value){
        $json[$key] = $value;    
    };

    echo json_encode($json, JSON_UNESCAPED_SLASHES);
?>

当前的 JSON 结果是:

[
 {
  "id": "1",
  "first_name": "James",
  "last_name": "Haze"
 },
 {
  "id": "2",
  "first_name": "Neo",
  "last_name": "Anderson"
 }
]

如何在不修改 MySQL 数据库的情况下添加到当前元素 "country": "Australia"?我希望结果如下所示:

[
 {
  "id": "1",
  "first_name": "James",
  "last_name": "Haze",
  "Country": "Australia"
 },
 {
  "id": "2",
  "first_name": "Neo",
  "last_name": "Anderson",
  "Country": "Australia"
 }
]

有可能吗?

【问题讨论】:

    标签: php mysql sql json pdo


    【解决方案1】:

    您可以在 SQL 中选择所需的附加“列”:

    $stmt = $sql->prepare("select
                                  id
                                , first_name
                                , last_name
                                , 'Australia' as Country
                             from people");
    

    顺便说一句,您不应该在选择查询中使用* - 这会使它们在您添加新列名时表现得怪异,并在重命名列时隐藏错误。

    如果你想选择一个变量值,你可以直接将它插入到你的 SQL 中:

    $stmt = $sql->prepare("select
                                  id
                                , first_name
                                , last_name
                                , '$country_name' as Country
                             from people");
    

    尽管国家名称不是必需的,但使用(命名的)SQL 占位符仍然是一个好习惯,因此您确实应该这样做:

    $stmt = $sql->prepare("select
                                  id
                                , first_name
                                , last_name
                                , :country as Country
                             from people");
    $stmt->execute([':country' => $country_name]);
    

    (这主要是在其他地方重用此代码时,因为我不知道包含单引号的有效国家/地区名称)

    【讨论】:

    • 该列实际上并不存在于数据库中,修改数据库不是一种选择。
    • 您不需要选择列。您可以选择常量并为其命名。
    • 哦,好吧,我不是硬编码澳大利亚,而是如何从 PHP 全局变量 $countryName 中获取值?
    • 您应该在上面编辑您的问题并在您的问题中提出。例如,您可以将其插入到您的 SQL 字符串中 - 我将在上面更新我的答案。
    【解决方案2】:

    你可以直接在选择中添加你需要的值

     $stmt = $sql->prepare("select id
                            , firt_name
                            , last_name
                            , 'Australia' AS country
                             from people");
    

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多