前言:在零点博客折腾新东西的乐趣

最近在零点博客上发现很多朋友对在线工具开发很感兴趣,特别是处理杂乱数据的时候。以前我们用正则表达式手动整理 SQL 或 JSON,不仅累还容易出错。于是,我决定用这段时间积累的 C# 后端开发经验,结合 MySQL 和前端知识,撸一个在线工具。

这篇文章不只是吹水,我会把C#接口开发、SQL注入防护、JSON/XML解析等核心知识点揉碎了讲,甚至会把爬虫开发中爬取的数据怎么清洗入库都讲一下。文末附有源码和实战避坑指南。

需求分析与技术选型

我们要做的工具核心功能是:接收前端传来的 SQL 语句,进行格式化和美化,并支持一定的数据清洗。

  • 后端:C# (ASP.NET Core) 负责业务逻辑处理、SQL注入防护及与数据库交互。
  • 前端:HTML/CSS/JS 负责展示交互、JSON数据解析和正则验证。
  • 数据库:MySQL 存储常用语句模板和历史记录。

第一步:搞定前端交互与数据清洗

先别急着写 C#,前端的体验直接决定了工具好不好用。我们利用 JavaScript 的 eval (或更安全的解析库) 来处理 JSON,使用正则表达式来预处理 SQL 字符串。

核心代码片段:

function formatSql(sqlInput) {
    // 1. 先做简单的清洗,去除多余空格和换行
    let cleanSql = sqlInput.replace(/\s+/g, ' ').trim();

    // 2. 简单的正则替换,让 SQL 逻辑更清晰(仅作演示)
    cleanSql = cleanSql.replace(/(\bWHERE\b|\bSET\b|\bORDER BY\b)/gi, '\n$1');

    return cleanSql;
}

这里用到了正则表达式来处理字符串,这是开发在线工具必备的技能。在实际项目中,你可能还会用到 XML 或 JSON 解析来交换数据,比如前端发送的表单数据往往以 JSON 格式通过接口传给后端。

第二步:C# 后端接口开发与安全

前端把数据扔过来,C# 接收并验证。这里有一个巨大的坑:SQL注入防护。

很多新手喜欢直接拼接字符串,这在大数据量或爬虫场景下极其危险。我们一定要用预处理语句。

后端 Controller 写法示例:

[HttpPost]
public IActionResult ProcessSql(string rawSql)
{
    // 使用正则判断 SQL 是否符合基本语法
    if (!Regex.IsMatch(rawSql, "^SELECT|INSERT|UPDATE|DELETE.*", RegexOptions.IgnoreCase))
    {
        return BadRequest("非法的 SQL 语句格式");
    }

    using (var conn = new MySqlConnection(_connString))
    {
        // 使用预处理语句防止 SQL 注入
        // 参数名 :sql 要和下面 SQL 中的占位符一致
        var cmd = new MySqlCommand("SELECT * FROM users WHERE id = :id", conn);
        cmd.Parameters.AddWithValue("id", 1); 

        conn.Open();
        var reader = cmd.ExecuteReader();
        // 处理读取到的数据...
    }

    return Ok(new { status = "success", data = rawSql });
}

看到了吗?这就是 PHP 或 C# 后端开发中接口开发的标准写法。利用参数化查询,我们可以高枕无忧地处理用户输入,哪怕有人输入 1' OR '1'='1 这种字符,也会被转义成普通文本,绝不会被当成代码执行。

第三步:MySQL 数据库与爬虫数据入库

有时候,我们开发的工具需要读取一些数据,比如爬虫开发抓取的网页数据。这些数据存到 MySQL 里后,怎么调用呢?

这里涉及到简单的 SQL 语句操作。比如查询最近 10 条生成的记录:

SELECT * FROM tool_logs ORDER BY create_time DESC LIMIT 10;

在代码里执行这条语句,就能把最新的工具使用记录拉取出来,展示在前端。

源码与避坑指南

这套代码逻辑并不复杂,但在零点博客分享出来,我发现有几个坑很多人会踩:

  1. 字符编码问题:开发在线工具时,中文乱码是常态。MySQL 连接字符串务必加上 charset=utf8mb4;。
  2. 前端防 XSS:你把 SQL 输出到 HTML 里,记得转义 < 和 > 符号,防止脚本注入。
  3. 性能瓶颈:如果你同时处理 10MB 的 SQL 文件,一次性读取会内存溢出。建议分块读取,或者用 流式处理。

感兴趣的兄弟可以参考我博客上的完整源码,顺便学学怎么把这个功能集成到 EMLOG 这样的轻量级 CMS 中。