网站迁移新URL后MySQL数据库提交查询失败求助
排查迁移后MySQL提交失效的问题
看起来你遇到了网站迁移后数据库只能读不能写的麻烦,咱们一步步来定位问题:
1. 先确认表单提交的基础逻辑是否正常
从你给出的代码片段看,核心判断是if($_POST['submit']){,先检查这部分:
- 核对HTML表单:确保表单的
method="POST",提交按钮的name="submit"(如果按钮name不对,这个判断永远不会触发)。 - 临时加调试代码:在
if($_POST['submit']){前添加:
提交表单后看是否能接收到var_dump($_POST); exit;submit参数和其他表单字段。如果看不到,说明表单的action属性可能指向了旧URL,或者相对路径在新环境下失效了。
2. 检查数据库用户的写入权限
能读取数据说明SELECT权限没问题,但写入权限(INSERT/UPDATE/DELETE)可能在迁移时没配置到位:
- 登录PHPMyAdmin,找到你的数据库用户,查看权限列表,确保勾选了
INSERT、UPDATE、DELETE这些写入相关权限。 - 直接执行测试写入:在
$link = linkDB();后添加:
替换成你的表名和字段,看能否成功写入,同时获取具体错误信息。$test_query = "INSERT INTO 你的表名 (某字段) VALUES ('测试内容')"; if(mysqli_query($link, $test_query)){ echo "写入成功"; } else { echo "写入失败:" . mysqli_error($link); } exit;
3. 深挖submitDB函数的错误细节
你提到submitDB出错会die返回错误,但可能你没看到具体信息:
- 开启PHP错误显示:在代码最开头添加:
这样函数里的语法错误、SQL错误都会直接显示出来。error_reporting(E_ALL); ini_set('display_errors', 1); - 检查
sqlFunctions.php里的submitDB函数:- 核对SQL语句的字段名是否和重建后的表结构匹配(比如有没有漏加字段、拼写错误);
- 看是否处理了特殊字符(比如没做转义导致SQL语法错误);
- 检查表约束:比如某个字段是
NOT NULL但你没传值,或者外键约束不满足。
4. 排查服务器端的限制
- 检查PHP配置:查看
post_max_size和upload_max_filesize,如果表单有大文本或文件上传,新服务器的配置可能比旧服务器小,导致POST数据被截断(可以通过phpinfo()查看当前配置)。 - 查看服务器安全日志:比如Apache的
error.log,看是否有mod_security之类的模块拦截了POST请求(比如包含特殊字符的参数)。
5. 排除会话/CSRF验证问题
如果你的表单之前用了CSRF令牌(存在session里的验证),迁移到新域名后session可能无法正常读取,导致提交被拦截。可以暂时注释掉CSRF验证逻辑,测试是否能正常提交。
优先从获取具体错误信息入手,有了明确的错误提示,定位问题会快很多。
内容的提问来源于stack exchange,提问作者DMrFrost
相关产品推荐
相关产品推荐

