json_encode中的时髦输出

时间:2019-03-05 00:33:55

标签: php mysql

当我json_encode来自MySQL数据库的响应时,我得到一些奇怪的输出。我对PHP还是很陌生,只在学校使用它,对我们的帮助表示感谢。

代码如下:

<?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

我不知道01的来源,也不知道如何摆脱它们。有人可以指出正确的方向吗?

好,所以我将其添加到代码中,现在应用程序崩溃了。

$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 个答案:

答案 0 :(得分:6)

这些是由于PDOStatement::fetchAll()的默认fetch_style导致的,它为您的行返回0索引列和命名列。

  

PDO :: FETCH_BOTH(默认值):返回一个在结果集中返回的同时由列名和0索引列号索引的数组

您可以使用PDO::FETCH_ASSOCPDO::FETCH_OBJ仅捕获列名(前者产生一个以列名作为键的关联数组,而后者产生一个属性为列名的匿名对象):

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

答案 1 :(得分:2)

将您的数据库fetch_style更改为关联数据库:

如果您使用的是PDO,请签出PDO::FETCH_ASSOC