【问题标题】:JSON output for SELECT with Prepared Statement带有准备好的语句的 SELECT 的 JSON 输出
【发布时间】:2017-02-18 04:57:58
【问题描述】:

我正在尝试使用准备好的语句将来自 SELECT 查询的结果编码为 JSON 输出。我有以下代码,但我无法让它工作。任何帮助将不胜感激。

$query = "SELECT Item.ItemID, Item.ItemName FROM Items"
    $stmt = $db->prepare($query);
    $stmt->execute();
    $stmt->store_result();
    $numrows = $stmt->num_rows;
    $stmt->bind_result($ItemID, $ItemName);

 for ($i=0; $i <$numrows; $i++) {
    $stmt->fetch();

$JSONArray = ["ItemID" => $ItemID,
             "ItemName" => $ItemName
             ]

echo json_encode($JSONArray);
}

【问题讨论】:

  • 代码中缺少引号($query 没有第二个引号),如果这不是问题,请写下显示给您的错误是什么
  • 请添加更多信息,它是怎么不工作的,你有什么错误吗?
  • 第 1 行末尾也缺少分号。

标签: php mysql json prepared-statement


【解决方案1】:

创建PDO对象时添加:

array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")

例如:

$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

这对我有帮助:)

https://stackoverflow.com/a/7030557/5764766所见

【讨论】:

    【解决方案2】:

    你不认为应该是 Items 而不是 Item 吗?还缺少引号和分号。

    $query = "SELECT Items.ItemID, Items.ItemName FROM Items";
    $stmt = $db->prepare($query);
    $stmt->execute();
    $result = $stmt->fetchAll();
    
    echo json_encode($result);
    

    另外,为了约定,我建议您保留小写的表名。 :)

    【讨论】:

      【解决方案3】:

      您应该始终将项目添加到容器数组中,而不是覆盖整个数组并且只编码和回显一次:

      ...
      
      $JSONArray = []; // initialize to empty array
      for ($i=0; $i <$numrows; $i++) {
          $row = $stmt->fetch();
          $ItemID = $row['ItemID'];
          $ItemName = $row['ItemName'];
          // add the new item in each iteration
          $JSONArray[] = ["ItemID" => $ItemID,
                   "ItemName" => $ItemName
                   ];
      }
      echo json_encode($JSONArray);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-25
        相关资源
        最近更新 更多