You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL INSERT/UPDATE在XAMPP正常但网站服务器不生效问题求助

问题排查与解决思路

1. 开启PDO错误抛出(优先排查,无报错核心原因)

当前PDO初始化未配置错误模式,默认静默失败,线上环境关闭错误显示后自然无日志输出。修改DB.php的PDO初始化代码,开启错误抛出即可看到具体报错:

$ConnectingDB = new PDO($DSN,'myUsername','myPass',
    array(
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // 新增错误抛出配置
    )
);

开启后复现操作,就能直接在error_log中看到SQL执行失败的具体原因。

2. 修正DSN配置错误

当前DSN中存在两个明显问题:

  • useUnicode、characterEncoding、useFastDateParsing是Java JDBC的连接参数,MySQL PDO完全不识别这些参数
  • 参数间的多余空格(host = localhost中的空格)在PHP7.3低版本中会导致连接参数解析异常

修正后的规范DSN写法:

$DSN='mysql:host=localhost;dbname=myDB;charset=utf8';

DSN中直接指定charset是更稳定的写法,原有SET NAMES配置可删除。

3. 检查数据库账号权限

确认线上使用的myUsername账号是否对myDB库的admins表有INSERT、UPDATE权限,很多线上环境为了安全默认只给业务账号开通SELECT权限。
可登录线上MySQL执行以下命令验证权限:

SHOW GRANTS FOR 'myUsername'@'localhost';

如果没有写入权限,用root账号执行授权即可:

GRANT INSERT,UPDATE ON myDB.admins TO 'myUsername'@'localhost';
FLUSH PRIVILEGES;

4. 修正代码逻辑缺陷

  • 执行header("Location: login.php");后未加exit;终止代码执行,PHP发送跳转头后仍会运行后续代码,若后续存在事务回滚、变量覆盖逻辑,会导致已执行的写入操作被撤销,修改如下:
$Execute=$stmt->execute();
header("Location: login.php");
exit; // 必须新增,终止后续代码运行
  • 若代码中开启了事务,需确认执行完INSERT/UPDATE后调用了$ConnectingDB->commit()提交事务,否则脚本结束后会自动回滚未提交的写入操作。

5. 验证前端逻辑影响

你提供的JS过渡代码只会拦截<a>标签的点击事件,若你使用常规<button type="submit">提交表单,这段JS不会产生任何影响。若你使用<a>标签触发表单提交,需确认点击事件未被JS拦截、导致表单未提交就跳转。

内容的提问来源于stack exchange,提问作者Ivan Sibinovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:57:04