首页 > 解决方案 > echo json_decode() 仅返回方括号

问题描述

我正在尝试从 MySQL 查询中获取 JSON 对象,以便使用 JavaScript 在选择中添加选项元素。

我的 PHP 代码是:

$carrera = $_GET['idcarrera'];

require_once("inc/config.php"); 
$pdo = conexionPDO();
$sql = "SELECT  materias.clave, materias.nombre FROM carreras_plan
            inner join carreras_plan_materia on carreras_plan.clave = carreras_plan_materia.clave_carrera
            inner join materias on carreras_plan_materia.clave_materia = materias.clave
            where carreras_plan_materia.clave_carrera like $carrera;";
    $ps = $pdo->prepare($sql);
    $ps->execute();

    $data = $ps->fetchAll(PDO::FETCH_ASSOC);
    $json_data = json_encode($data, true);
    echo $json_data;

如果我得到 JSON 并使用console.log,我会在控制台中得到查询结果。不过,如果我删除echo $json_data;,当我尝试将字符串解析为 JSON 时,会出现下一个错误:

Uncaught SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

我认为这是因为echo $json_data;返回给我的只有方括号:

在此处输入图像描述

有人能帮我吗?谢谢!

标签: phpsqljson

解决方案


您需要使用准备好的语句,并且还应该检查查询的结果。你怎么知道它是否失败了?

$carrera = $_GET['idcarrera'];

require_once("inc/config.php"); 
$pdo = conexionPDO();
$sql = "SELECT  materias.clave, materias.nombre FROM carreras_plan
        inner join carreras_plan_materia on carreras_plan.clave = carreras_plan_materia.clave_carrera
        inner join materias on carreras_plan_materia.clave_materia = materias.clave
        where carreras_plan_materia.clave_carrera like ?";
if ($ps = $pdo->prepare($sql)) {
    if ($ps->execute([$carrera])) {
        $data = $ps->fetchAll(PDO::FETCH_ASSOC);
    } else {
        $data = ["error"=>"execute failed"];
    }
} else {
    $data = ["error"=>"prepare failed"]
}
$json_data = json_encode($data);
echo $json_data;

推荐阅读