C# 读取 EMLOG 博客数据:从 MySQL 连接池到 SQL 注入防护的实战复盘

大家好,我是零点博客的主理人。最近在折腾一些博客相关的自动化工具,涉及到用 C# 脚本直接去连接EMLOG 博客系统的 MySQL 数据库。这玩意儿虽说常见,但中间坑不少,尤其是关于SQL注入防护这块,很多新人容易偷懒直接字符串拼接,这是绝对要避开的雷区。

今天我就把自己在零点博客后台调试的这段代码完整复盘出来,手把手教大家如何用 C# 高效、安全地读取 MySQL 数据,顺便把接口开发和 JSON 解析这块的知识点穿插进去。

1. 准备工作与 NuGet 包引入

首先,我们要操作数据库,肯定离不开连接。在 C# 开发中,最常用的还是 MySql.Data 这个库。如果你使用的是 Visual Studio,直接在 NuGet 包管理器里搜一下安装就行。如果你在 Linux 服务器上跑 .NET Core,那就用命令行:

dotnet add package MySql.Data

2. 环境配置与连接字符串

EMLOG 的配置文件通常在根目录下,我们只需要拿到数据库账号、密码和数据库名即可。这里要注意,敏感信息千万不要硬编码在代码里,建议放在配置文件中。

连接字符串的写法如下,这是标准的 MySQL 连接格式:

string connectionString = "Server=localhost;Database=zero_blog;Uid=root;Pwd=your_password;SslMode=None;";

3. 核心代码:C# 操作数据库与防注入实战

很多新手容易犯的错误是直接拼接 SQL,比如这样:

string sql = "SELECT * FROM emlog_blog WHERE title LIKE '%" + keyword + "%'";

这简直是SQL注入的温床,黑客只要构造一个恶意的 keyword 就能跑库了。

作为专业的后端开发者,我们一定要用预处理语句。来看看我是怎么写的:

using (MySqlConnection conn = new MySqlConnection(connectionString))
{
    conn.Open();
    // 使用 MySqlCommand 并绑定参数
    string sql = "SELECT * FROM emlog_blog WHERE title LIKE @keyword";

    using (MySqlCommand cmd = new MySqlCommand(sql, conn))
    {
        // 生成参数,强制类型转换,杜绝注入风险
        cmd.Parameters.AddWithValue("@keyword", "%" + keyword + "%");

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // 模拟 JSON 格式输出
                var article = new
                {
                    Id = reader["gid"],
                    Title = reader["title"],
                    Date = reader["date"],
                    Content = reader["content"]
                };

                // 序列化为 JSON 字符串方便传输或日志记录
                string jsonResult = JsonConvert.SerializeObject(article);
                Console.WriteLine(jsonResult);
            }
        }
    }
}

4. 底层避坑指南与经验总结

写完上面的代码,大家觉得搞定了吗?其实还有两个细节我必须提醒大家,这都是在开发在线工具时总结的血泪史:

  • 字段类型匹配: EMLOG 数据库里的某些字段可能存的是序列化的大段 JSON 文本。在使用 C# 读取时,要确保读取器(DataReader)的类型匹配,避免报错。如果读到的是字符串流,记得在解析 JSON 时处理转义字符。
  • 异常处理: 数据库操作总是伴随着可能断连的风险。不要让程序因为一个连接失败就崩了,一定要加上 try-catch 块,捕获 MySqlException,并给出友好的错误提示。

这套逻辑不仅可以用于读数据,只要你 SQL 写得好,做个简单的数据导出工具或者爬虫辅助脚本也是轻轻松松。

希望这个复盘对大家在零点博客或者日常 C# 开发中有帮助,下期我们聊聊如何用正则表达式清洗 EMLOG 里的 HTML 标签。