代码之家  ›  专栏  ›  技术社区  ›  MMelvin0581

json_编码中的Funky输出

  •  2
  • MMelvin0581  · 技术社区  · 7 年前

    json_encode

    <?php
    require_once('./database.php');
    
    header("Access-Control-Allow-Origin: *");
    header("Content-Type: application/json; charset=UTF-8");
    
    if (isset($_GET['format'])) {
        $format = filter_var($_GET['format']);
    }
    
    if (isset($_GET['action'])) {
        $action = filter_var($_GET['action'], FILTER_SANITIZE_STRING);
        $tableName = "sk_$action";
    }
    
    $query = "SELECT * FROM $tableName";
    
    if (isset($_GET['course'])) {
        $course = filter_input(INPUT_GET, 'course');
        $query .= " WHERE courseID = :course_id";
    }
    
    $statement = $db->prepare($query);
    $statement->bindValue(':course', $course);
    $statement->execute();
    
    $response = $statement->fetchAll();
    
    $statement->closeCursor();
    
    echo json_encode($response);
    

    以下是答复:

    enter image description here

    0 1 它们是从哪里来的,也不知道如何摆脱它们。有人能给我指一下正确的方向吗?

    $response = $statement->fetchAll(PDO::FETCH_ASSOC);
    
    $statement->closeCursor();
    
    if ($format == 'json') {
        echo json_encode($response);
    }
    if ($format == 'xml') {
        $xml = new SimpleXMLElement($response[0]);
        array_walk_recursive($response, array($xml, 'addChild'));
        print $xml->asXML();
    }
    

    JSON部分工作正常,但当我 format=xml ,该页不加载。还有那些好消息吗,伙计?

    2 回复  |  直到 7 年前
        1
  •  7
  •   Marty    7 年前

    这些都是由于违约造成的 fetch_style 属于 PDOStatement::fetchAll()

    PDO::FETCH_BOTH(默认):返回一个数组,该数组按结果集中返回的列名和0索引的列号进行索引

    PDO::FETCH_ASSOC PDO::FETCH_OBJ 要仅捕获列名(前者生成以列名为键的关联数组,后者生成以列名为属性的匿名对象),请执行以下操作:

    $response = $statement->fetchAll(PDO::FETCH_ASSOC);
    
        2
  •  2
  •   Miroslav Glamuzina    7 年前

    更改数据库 fetch_style 对于关联的:

    如果您正在使用PDO,请查看 PDO::FETCH_ASSOC