插件(前端)只是这个项目的一半。用户注册、登录、套餐管理、激活码系统、文章管理——这些都需要一个后端。而我在开始之前,对"后端"这两个字的理解约等于零。
但 AI 知道怎么做。
选型:为什么用 PHP 而不是 Node.js
我自己其实无所谓——反正都不懂。AI 的建议是用 PHP,理由是部署简单。中国的虚拟主机和服务器托管几乎都预装了 PHP 环境,宝塔面板一键搞定。如果用 Node.js,需要额外的配置和进程管理——对零基础的人来说,PHP 的学习成本和运维成本都更低。
我就听了这个建议。现在看来是对的——后面部署到宝塔的时候,PHP 确实省了不少事。
数据库:从 SQLite 到 MySQL 的痛苦迁移
早期开发的时候,数据库用的是 SQLite。AI 说 SQLite 很适合本地开发——不需要装数据库服务,就是一个文件。
运行了一段时间之后,问题来了。SQLite 处理不了高并发——多个用户同时请求的时候会报"database locked"。而且宝塔面板默认用 MySQL,SQLite 的文件管理不太方便。
于是决定迁移到 MySQL。
这个过程比我想象的复杂。不是简单的"把数据拷过去"——SQL 语法不一样。SQLite 用 datetime('now','localtime'),MySQL 用 NOW()。SQLite 用 INSERT OR REPLACE INTO,MySQL 用 REPLACE INTO。还有很多细微差别。
AI 帮我写了一个翻译层——在 Database 类里加了一个 translate() 方法,自动把 SQLite 语法转成 MySQL 语法。这样已有的代码基本上不用改,数据库就平滑切换过去了。
迁移过程中也踩了坑。MySQL 的 PDO 必须设置 ATTR_EMULATE_PREPARES = false——否则 LIMIT/OFFSET 的参数会被当成字符串而不是整数,SQL 报错。这个 bug 搞了我一个下午,最后 AI 看了一会儿代码就定位到了。
管理后台:激活码、文章、SEO
后端不只是 API。我还需要一个管理后台——图形界面操作,不需要写 SQL。
AI 帮我写了以下页面:用户管理(查看注册用户、套餐状态)、套餐管理(增删改查套餐配置)、激活码管理(批量生成、搜索、筛选、导出 CSV)、文章编辑器(基于 Quill.js 的富文本编辑、封面图上传、定时发布)、SEO 设置(修改首页的 title/description/keywords,搜索结果预览)。
每个页面都是纯 HTML + CSS + 原生 JS——没有用任何前端框架。AI 说这样比较简单,一个文件搞定所有事情,部署也方便。
最实用的功能是激活码系统。我当时需要一个方式让付费用户激活套餐。AI 设计了整个流程:管理后台批量生成激活码 → 用户拿到激活码后在插件里输入 → 系统激活对应的套餐并延长有效期。激活码格式是 XXXX-XXXX-XXXX(类似礼券),排除容易混淆的 0/O/1/I/L,确保用户不会输错。
一些感想
做后端的感觉跟做前端很不一样。前端能看到东西——你点一下按钮,页面变了,有反馈。后端是"看不见的"——API 跑在服务器上,数据存在数据库里。出了问题你不知道在哪,只能盯着日志猜。
但 AI 帮我消除了很多这种不确定性。它不懂的地方会告诉我"这需要查一下",懂了的地方直接写好代码。而且 PHP 的后端代码其实挺规整的——AI 写出来的东西,比我网上找的那些教程里的代码质量高。