php - 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;
返回给我的只有方括号:
有人能帮我吗?谢谢!
解决方案
您需要使用准备好的语句,并且还应该检查查询的结果。你怎么知道它是否失败了?
$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;
推荐阅读
- webpack - 无服务节点 8.10 babel-runtime
- ruby-on-rails - 我为 rails new app 做了 -T 但现在我想安装默认的测试框架
- java - 不使用 split() 在 Java 中标记字符串
- python - 从python中的ODS文件获取超链接?
- apache-spark - PySpark foreachPartition 并行写入数据库
- r - 使用“或”约束设置线性优化器
- c++ - `myClass obj(var1, var2)` 和 `myClass obj= myClass(var1, var2)` 有什么区别
- node.js - 避免嵌套承诺
- c# - C# 使用 ILnumerics 在 3d 中绘图
- algorithm - 与 O 表示法的算法比较