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

PHP通过HTML表单提交时连接MariaDB卡住,数据无法插入

问题排查与解决方案

1. 先开启错误显示,定位空白原因

空白页面大概率是PHP抛出致命错误但未输出,在transmit.php最顶部添加以下代码,强制显示所有错误:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// 原有数据库连接代码...

刷新提交后就能看到具体错误信息,避免盲目排查。

2. 修复SQL语法错误

你的SQL语句中表名test-table包含横杠,MariaDB会将其解析为test - table(减法运算),必须用反引号包裹表名才能正确识别:

$sql = "INSERT INTO `test-table` (phone, text, date, time) VALUES ('1234', 'hi', '2001-11-08', '11:30')";

3. 解决数据库用户权限差异(核心问题)

CLI环境下用root能正常连接,但Web环境(由www-data用户运行)可能被数据库拒绝:

  • 默认MariaDB的root用户仅允许通过本地socket(localhost)连接,而Web端PHP可能使用TCP/IP(127.0.0.1)连接,导致权限不匹配
  • 解决方法:
    1. 登录MariaDB命令行:
      mysql -u root -p
      
    2. 给root用户添加TCP/IP访问权限:
      GRANT ALL PRIVILEGES ON test.* TO 'root'@'127.0.0.1' IDENTIFIED BY '你的数据库密码';
      FLUSH PRIVILEGES;
      
    3. 或者更安全的做法是创建专门的Web数据库用户:
      CREATE USER 'web_user'@'127.0.0.1' IDENTIFIED BY '自定义安全密码';
      GRANT INSERT, SELECT ON test.* TO 'web_user'@'127.0.0.1';
      FLUSH PRIVILEGES;
      
      之后修改transmit.php中的数据库用户名和密码为新用户的信息。

4. 验证Web环境的mysqli扩展

确保Web服务器的PHP已启用mysqli扩展:
在transmit.php中添加phpinfo();,访问该页面后搜索mysqli,确认扩展状态为已启用。

5. 确认文件路径与目录权限

  • 确保index.html和transmit.php放在Web服务器根目录(如/var/www/html)
  • 递归设置目录归属为www-data:
    chown -R www-data:www-data /var/www/html
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:55:55