[英]Funky output in json_encode
當我對MySQL數據庫的響應進行json_encode
時,我得到了一些奇怪的輸出。 我是非常新的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
,頁面不會加載。 得到了那些好心理的家伙?
這些是由於PDOStatement::fetchAll()
的默認fetch_style
,它返回行的0索引和命名列。
PDO :: FETCH_BOTH(默認值):返回由結果集中返回的列名和0索引列號索引的數組
您可以使用PDO::FETCH_ASSOC
或PDO::FETCH_OBJ
來僅捕獲列名稱(前者生成一個以列名稱為鍵的關聯數組,后者生成一個匿名對象,其屬性為列名稱):
$response = $statement->fetchAll(PDO::FETCH_ASSOC);
將數據庫fetch_style
更改為關聯數據庫:
如果您使用的是PDO,請查看PDO :: FETCH_ASSOC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.