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)连接,导致权限不匹配 - 解决方法:
- 登录MariaDB命令行:
mysql -u root -p - 给root用户添加TCP/IP访问权限:
GRANT ALL PRIVILEGES ON test.* TO 'root'@'127.0.0.1' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES; - 或者更安全的做法是创建专门的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中的数据库用户名和密码为新用户的信息。
- 登录MariaDB命令行:
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
相关产品推荐
相关产品推荐

