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

如何实现Android应用从MySQL(WordPress)数据库获取数据?

Android 从WordPress MySQL数据库获取数据的完整实现方案

嘿,看起来你已经在动手搭建Android应用和WordPress数据库之间的桥梁了!我帮你把这段PHP脚本补全完善,再搭配Android端的调用示例和关键注意事项,让整个流程顺畅跑起来。

第一步:完善PHP中间层脚本

这个脚本作为Android和WordPress数据库的中间API,负责处理请求、查询数据并返回JSON格式的结果(Android端最易处理的格式):

<?php
/**
 * Android应用从WordPress MySQL数据库取数据的API脚本
 */
// 数据库配置(强烈建议把这些配置移到Web根目录外的单独文件,避免泄露)
define('DB_HOST', 'localhost');
define('DB_USER', 'your_db_username');
define('DB_PASS', 'your_db_password');
define('DB_NAME', 'your_wordpress_db_name');

// 初始化数据库连接
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

// 检查连接状态
if ($conn->connect_error) {
    die(json_encode(['success' => false, 'message' => '数据库连接失败: ' . $conn->connect_error]));
}

// 设置UTF-8字符集,避免中文乱码
$conn->set_charset('utf8mb4');

// 示例:根据Android端传入的分类ID获取已发布文章
$categoryId = isset($_GET['category_id']) ? intval($_GET['category_id']) : 0;

// WordPress核心表查询(注意表前缀,默认是wp_,如果改了要替换)
$sql = "SELECT ID, post_title, post_content, post_date 
        FROM wp_posts 
        WHERE post_status = 'publish' 
        AND post_type = 'post'";

// 如果有分类ID,添加过滤条件(用预处理语句防止SQL注入)
if ($categoryId > 0) {
    $stmt = $conn->prepare($sql . " AND ID IN (SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id = ?)");
    $stmt->bind_param("i", $categoryId);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $result = $conn->query($sql);
}

// 组装返回数据
$response = [];
if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        $response[] = [
            'id' => $row['ID'],
            'title' => $row['post_title'],
            'content' => wp_strip_all_tags($row['post_content']), // 移除WordPress的HTML标签
            'date' => $row['post_date']
        ];
    }
    echo json_encode(['success' => true, 'data' => $response]);
} else {
    echo json_encode(['success' => false, 'message' => '未找到匹配的数据']);
}

// 清理资源
if (isset($stmt)) $stmt->close();
$conn->close();
?>

第二步:Android端调用API获取数据

推荐用OkHttp来处理网络请求,简洁稳定,下面是Kotlin示例:

1. 添加依赖

在你的app/build.gradle中添加OkHttp和Gson依赖(Gson用于解析JSON):

dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.12.0'
    implementation 'com.google.code.gson:gson:2.10.1'
}

2. 网络请求与数据解析

class MainActivity : AppCompatActivity() {
    private val okHttpClient = OkHttpClient()
    private val gson = Gson()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        fetchPostsFromApi(1) // 传入分类ID,比如1
    }

    private fun fetchPostsFromApi(categoryId: Int) {
        val requestUrl = "https://your-domain.com/your-script.php?category_id=$categoryId"
        val request = Request.Builder().url(requestUrl).build()

        okHttpClient.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                // 请求失败,切换到UI线程提示用户
                runOnUiThread {
                    Toast.makeText(this@MainActivity, "请求出错: ${e.message}", Toast.LENGTH_SHORT).show()
                }
            }

            override fun onResponse(call: Call, response: Response) {
                response.body?.string()?.let { jsonStr ->
                    val apiResponse = gson.fromJson(jsonStr, ApiResponse::class.java)
                    runOnUiThread {
                        if (apiResponse.success) {
                            // 成功获取数据,处理逻辑(比如显示到RecyclerView)
                            apiResponse.data?.forEach { post ->
                                Log.d("Post", "标题: ${post.title}")
                            }
                        } else {
                            Toast.makeText(this@MainActivity, apiResponse.message, Toast.LENGTH_SHORT).show()
                        }
                    }
                }
            }
        })
    }

    // 数据模型类,和PHP返回的JSON结构对应
    data class ApiResponse(
        val success: Boolean,
        val message: String?,
        val data: List<Post>?
    )

    data class Post(
        val id: Int,
        val title: String,
        val content: String,
        val date: String
    )
}

关键注意事项

  • 安全优先级最高:
    • 绝对不要把数据库密码硬编码在PHP脚本里!把配置文件放在Web根目录之外,通过include引入。
    • 必须用HTTPS传输数据,防止明文泄露。
    • 始终用预处理语句处理用户输入,彻底避免SQL注入风险。
  • WordPress适配:如果你的WordPress修改了表前缀(不是默认的wp_),一定要替换SQL中的表名。
  • 权限控制:给数据库用户只分配查询权限,不要给超级权限,降低风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:37:13