C# 实现 EMLOG 后端接口:MySQL数据库 防注入与 JSON 数据解析实战
大家好,我是零点。在构建技术博客系统时,很多站长喜欢使用 EMLOG 这类轻量级 CMS。但对于开发者来说,它的默认 PHP 后端有时候不够用,或者扩展性受限。前几天我就在折腾,想用 C# 写一套后端接口,去读取零点博客 EMLOG 的文章数据,然后喂给前端页面展示。
在这个过程中,我对 MySQL数据库 的操作深度挖掘了一把。今天就把这个实战过程复盘一下,特别是关于 SQL注入 防护和 JSON 数据处理这块,全是干货,建议收藏。
一、 开发背景:为什么要在 C# 里玩 EMLOG?
EMLOG 默认是 PHP+MySQL 的架构,但为了做个独立的前后端分离 Demo,我直接切成了 C# Web API。痛点在于,我们需要实时从 EMLOG 的 MySQL数据库 里把文章拿出来,转成 JSON 格式给前端调用。如果你直接拼接 SQL 语句,稍微不注意就会出大问题。
二、 核心难点:SQL注入 防护与预处理语句
这绝对是新手最容易翻车的地方。比如我们要查 ID 为 5 的文章:
string sql = "SELECT * FROM emlog_article WHERE gid = " + gid;
如果这里的 gid 是用户输入的(比如 URL 传参),恶意用户就能跑出所有数据。所以,在 MySQL数据库 操作中,预处理语句是必须的。
在 C# 中,我们可以使用 MySqlCommand 配合 Parameters.AddWithValue:
string connStr = "Server=localhost;Database=emlog_db;Uid=root;Pwd=123456;charset=utf8mb4;";
string sql = "SELECT title, content FROM emlog_article WHERE gid = @gid";
using (MySqlConnection conn = new MySqlConnection(connStr))
{
conn.Open();
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
// 核心:使用参数化查询,自动进行 SQL注入 防护
cmd.Parameters.AddWithValue("@gid", 5);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// 读取数据逻辑
}
}
}
}
三、 实战:解析 MySQL 数据并转为 JSON
读出来只是第一步,我们最终要给前端的是一个干净的 JSON 对象。在 C# 里,简单的手动拼接 JSON 比较累,我们可以利用 Newtonsoft.Json 库来快速搞定。
下面是一个完整的示例,模拟从 MySQL数据库 拉取文章列表并返回 JSON:
[HttpGet]
[Route("api/getArticle")]
public JsonResult GetArticle()
{
// 1. 准备 JSON 结构体
var result = new { code = 200, msg = "success", data = new List<object>() };
// 2. 数据库连接与查询
using (var conn = new MySqlConnection(connStr))
{
conn.Open();
var sql = "SELECT gid, title, comments FROM emlog_article ORDER BY date DESC LIMIT 10";
using (var cmd = new MySqlCommand(sql, conn))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// 3. 封装数据对象
var item = new
{
id = reader.GetInt32("gid"),
title = reader.GetString("title"),
comments = reader.GetInt32("comments")
};
// 4. 加入列表
result.data.Add(item);
}
}
}
}
// 5. 返回 JSON
return Json(result);
}
四、 建站避坑指南
在本地测试没问题,上生产环境(或者遇到中文乱码)时,一定要注意两点:



评论一下吧
取消回复