You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用向PHP后端提交数据时出现FormatException异常

问题根源分析

你遇到的FormatException: Unexpected character (at character 1),本质是Flutter请求期望接收JSON格式响应,但PHP后端返回的内容不是有效JSON——这是因为PHP代码存在SQL语法错误和预处理逻辑错误,触发了PHP报错,输出了错误信息而非正确的JSON结构。


修复步骤

1. 修正PHP代码的核心问题

你的PHP代码有两个致命错误:SQL语句引号拼接混乱、错误使用预处理(直接拼接变量到SQL,既存在注入风险又会导致语法错误),同时自动递增的ID无需手动插入。修正后的代码如下:

<?php
require("db.php");

// 先校验必填参数是否存在
if(isset($_POST["name"]) && isset($_POST["last"])){
    $firstName = $_POST["name"];
    $lastName = $_POST["last"];

    // 自动递增id无需在INSERT中指定,仅写入需要赋值的列
    // 使用预处理占位符,避免SQL注入和语法错误
    $querySt = "INSERT INTO project1 (firstName, lastName) VALUES(?, ?)";
    $statement = $connection->prepare($querySt);
    // 绑定字符串类型参数,"ss"对应两个字符串变量
    $statement->bind_param("ss", $firstName, $lastName);
    
    // 执行并返回结构化JSON响应
    if($statement->execute()){
        echo json_encode(["status" => "success", "message" => "数据插入成功"]);
    } else {
        echo json_encode(["status" => "error", "message" => $statement->error]);
    }
} else {
    echo json_encode(["status" => "error", "message" => "缺少必填参数"]);
}
?>

2. 完善Flutter的响应处理逻辑

原Flutter代码未做异常捕获和响应校验,当后端返回非JSON内容时会直接抛出异常。添加错误捕获和解析逻辑:

import 'dart:convert';
import 'package:http/http.dart' as http;

postData() async {
  name = nameField.text;
  lastName = lastField.text;

  var urlWeb = Uri.parse('https://sqlfinalproject.000webhostapp.com/insert.php');

  try {
    var res = await http.post(
      urlWeb,
      headers: {"Accept": "application/json"},
      body: {
        "name": name,
        "last": lastName,
      },
    );

    // 先校验HTTP响应状态码
    if (res.statusCode == 200) {
      var responseData = jsonDecode(res.body);
      print(responseData["message"]);
      // 这里可以添加成功后的业务逻辑,比如清空输入框、提示用户等
    } else {
      print("请求失败,状态码: ${res.statusCode}");
    }
  } catch (e) {
    // 捕获格式异常、网络异常等
    print("请求错误: $e");
  }
}

额外注意事项

  • 确保db.php中的数据库连接配置正确,且project1表的id字段已设置为自动递增主键
  • 测试时可以用Postman直接发送POST请求到PHP接口,先确认返回的JSON是否有效
  • 永远不要直接将用户输入拼入SQL语句,预处理语句是避免SQL注入的标准方案

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:54:51