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

Flutter报No route to host错误及对接PHP REST API操作MySQL问题求助

问题一:SocketException No route to host (errno 113) 排查修复
  • 首先确认运行环境:10.0.2.2是Android模拟器专属的宿主机映射地址,如果你用真机调试,不能使用该地址,需要直接填写服务端所在设备的局域网IP(一般为192.168.x.x格式)
  • 检查服务端防火墙设置:确认服务端PHP服务对应的端口(默认一般为80、8080,自定义端口按需确认)已开放,未被防火墙拦截:Linux环境可执行ufw allow 端口号开放端口,Windows环境可在防火墙高级设置中添加入站规则
  • 验证接口可访问性:直接在测试设备的浏览器中输入完整请求地址${Env.urlPrefix}/list.php,确认可以正常返回数据,排除服务端未启动、路径填写错误的问题
  • 检查Android网络权限:确认android/app/src/main/AndroidManifest.xml中已添加网络权限声明:
<uses-permission android:name="android.permission.INTERNET" />
  • 适配Android高版本明文请求限制:如果你的服务端用的是HTTP协议未配置HTTPS,需要在AndroidManifest的application标签中添加android:usesCleartextTraffic="true",允许明文网络请求

问题二:Flutter 通过PHP REST API写入MySQL实现示例

后端PHP代码示例

生产环境使用请补充参数校验、SQL注入防护、接口权限校验等逻辑,示例代码仅做功能演示
创建add_data.php文件,代码如下:

<?php
// 调试阶段可添加跨域配置,生产环境按需限制来源
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

// 数据库连接配置
$host = '数据库地址';
$dbname = '数据库名称';
$username = '数据库用户名';
$password = '数据库密码';

try {
    $conn = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 接收Flutter端传入的JSON参数
    $data = json_decode(file_get_contents("php://input"));

    // 参数非空校验
    if(!empty($data->nama_perusahaan) && !empty($data->alamat)){
        // 预编译SQL防止注入
        $sql = "INSERT INTO daftar_perusahaan (nama_perusahaan, alamat, telepon) VALUES (:nama, :alamat, :telepon)";
        $stmt = $conn->prepare($sql);

        // 绑定参数
        $stmt->bindParam(":nama", $data->nama_perusahaan);
        $stmt->bindParam(":alamat", $data->alamat);
        $stmt->bindParam(":telepon", $data->telepon);

        if($stmt->execute()){
            http_response_code(201);
            echo json_encode(array("message" => "数据添加成功", "status" => true));
        }else{
            http_response_code(503);
            echo json_encode(array("message" => "数据添加失败", "status" => false));
        }
    }else{
        http_response_code(400);
        echo json_encode(array("message" => "参数不完整", "status" => false));
    }
} catch(PDOException $e) {
    http_response_code(500);
    echo json_encode(array("message" => "数据库错误: " . $e->getMessage(), "status" => false));
}
?>

Flutter端代码示例

首先在pubspec.yaml中添加http依赖:

dependencies:
  flutter:
    sdk: flutter
  http: ^1.1.0

请求提交代码:

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

// 提交数据方法
Future<bool> addPerusahaanData({
  required String namaPerusahaan,
  required String alamat,
  required String telepon,
}) async {
  try {
    final url = Uri.parse("${Env.urlPrefix}/add_data.php");
    // 组装请求参数
    final requestData = jsonEncode({
      "nama_perusahaan": namaPerusahaan,
      "alamat": alamat,
      "telepon": telepon,
    });

    // 发送POST请求
    final response = await http.post(
      url,
      headers: {"Content-Type": "application/json"},
      body: requestData,
    );

    if (response.statusCode == 201) {
      final result = jsonDecode(response.body);
      return result['status'] ?? false;
    } else {
      print("请求失败,状态码:${response.statusCode},错误信息:${response.body}");
      return false;
    }
  } catch (e) {
    print("请求异常:$e");
    return false;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:39:04