当前位置:首页 > 问答 > 正文

Android里怎么用PHP连数据库,代码示例和步骤分享,学习笔记记录一下

整理自CSDN博客《Android项目中如何连接PHP接口与MySQL数据库》、博客园文章《Android+PHP+MySQL开发入门实战》以及开发者个人技术笔记《移动端与服务器通信基础》)

为什么要在Android里用PHP连数据库 直接让Android应用连接数据库不安全(来源:CSDN博客),因为数据库地址、用户名密码会暴露在APP代码中,容易被反编译获取,通常做法是让Android端通过HTTP请求与PHP脚本交互,由PHP在服务器端操作数据库(来源:博客园文章),PHP充当中间层,负责验证请求和执行安全的数据库查询。

具体步骤与代码示例

  1. 准备服务器环境 需要在支持PHP和MySQL的服务器(如Apache+PHP+MySQL环境)部署PHP文件,本地测试可用XAMPP或宝塔面板搭建环境(来源:开发者笔记)。

  2. 创建数据库表 示例MySQL表结构(来源:CSDN博客):

    CREATE TABLE users (
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(50),
      email VARCHAR(50)
    );
  3. 编写PHP接口脚本 PHP文件(如api.php)负责接收Android请求、连数据库、返回JSON数据(来源:博客园文章):

    <?php
    $host = "localhost";
    $user = "root";
    $password = "";
    $database = "testdb";
    // 连接数据库
    $conn = mysqli_connect($host, $user, $password, $database);
    if (!$conn) {
      die("连接失败: " . mysqli_connect_error());
    }
    // 获取Android传来的参数(示例为查询用户)
    $user_id = $_POST['user_id']; // 从POST请求获取参数
    // 查询数据库(重要!必须防SQL注入)
    $stmt = $conn->prepare("SELECT name, email FROM users WHERE id = ?");
    $stmt->bind_param("i", $user_id); // "i"表示整数类型
    $stmt->execute();
    $result = $stmt->get_result();
    $response = array();
    if ($result->num_rows > 0) {
      while($row = $result->fetch_assoc()) {
        $response[] = $row;
      }
    }
    echo json_encode($response); // 返回JSON格式数据
    $stmt->close();
    $conn->close();
    ?>

    注意:实际使用需添加错误处理和安全验证(如Token验证),示例仅保留核心逻辑(来源:CSDN博客)。

  4. Android端代码(Java/Kotlin) Android中使用HttpURLConnection或OkHttp发送POST请求(来源:开发者笔记):

    // 在子线程中执行网络请求(Android禁止主线程网络操作)
    new Thread(() -> {
      try {
        URL url = new URL("http://你的服务器地址/api.php");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        // 发送请求参数
        String postData = "user_id=123";
        OutputStream os = conn.getOutputStream();
        os.write(postData.getBytes());
        os.flush();
        // 读取PHP返回的JSON数据
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(conn.getInputStream()));
        StringBuilder response = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
          response.append(line);
        }
        // 解析JSON(需处理异常)
        JSONArray jsonArray = new JSONArray(response.toString());
        for (int i = 0; i < jsonArray.length(); i++) {
          JSONObject obj = jsonArray.getJSONObject(i);
          String name = obj.getString("name");
          String email = obj.getString("email");
          // 更新UI需回到主线程:runOnUiThread或Handler
        }
        conn.disconnect();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }).start();

    注意:AndroidManifest.xml需添加网络权限 <uses-permission android:name="android.permission.INTERNET" />(来源:博客园文章)。

常见问题记录

  • 乱码问题:PHP和Android端需统一编码(如UTF-8),PHP可添加 header("Content-type: application/json; charset=utf-8");(来源:CSDN博客)。
  • 网络权限失效:Android 9以上默认禁止HTTP请求,需在res/xml/network_security_config.xml配置允许明文传输(来源:开发者笔记)。
  • 连接超时:Android端需设置连接超时时间 conn.setConnectTimeout(5000)
  • 安全性:实际项目应对通信数据加密(如HTTPS),并对PHP接口做身份验证(来源:博客园文章)。

补充说明

  • 现代开发推荐使用Retrofit等库简化网络请求(来源:开发者笔记),但基础原理仍需掌握。
  • 示例仅演示查询操作,插入/更新数据只需修改PHP中的SQL语句和Android请求参数。
  • 调试时可先用Postman测试PHP接口正常后再对接Android端。

(完)

Android里怎么用PHP连数据库,代码示例和步骤分享,学习笔记记录一下