当我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);
以下是回复:
我不知道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
时,该页面无法加载。有了这些好提示的家伙了吗?
答案 0 :(得分:6)
这些是由于PDOStatement::fetchAll()
的默认fetch_style
导致的,它为您的行返回0索引列和命名列。
PDO :: FETCH_BOTH(默认值):返回一个在结果集中返回的同时由列名和0索引列号索引的数组
您可以使用PDO::FETCH_ASSOC
或PDO::FETCH_OBJ
仅捕获列名(前者产生一个以列名作为键的关联数组,而后者产生一个属性为列名的匿名对象):
$response = $statement->fetchAll(PDO::FETCH_ASSOC);
答案 1 :(得分:2)
将您的数据库fetch_style
更改为关联数据库:
如果您使用的是PDO,请签出PDO::FETCH_ASSOC