PHP代码无法运行:仅显示文件内容,无法插入数据库
问题分析与解决步骤
1. 核心问题:本地文件协议无法解析PHP
你用chrome --allow-file-access-from-files file:///C:/filepath/index2.html直接打开HTML文件的方式,浏览器不会执行PHP代码——PHP必须运行在Web服务器(如XAMPP、WAMP、PHP内置服务器)环境中,浏览器只会把insert.php当成普通文本文件读取,这就是success回调弹窗显示PHP代码内容的原因。
解决方法:
- 搭建本地Web服务器:安装XAMPP/WAMP后,将HTML和PHP文件放到服务器根目录(比如XAMPP的
htdocs文件夹),通过http://localhost/index2.html访问页面,而非file://协议。 - 用PHP内置服务器:打开命令行进入文件所在目录,执行
php -S localhost:8000,再在浏览器访问http://localhost:8000/index2.html。
2. PHP代码的SQL语法与安全问题
你的INSERT语句存在两处关键错误,同时有SQL注入风险:
- 列名不能用单引号,应使用反引号(`)或直接省略(若列名不是SQL关键字);
- 字符串类型的变量(name、email)未加单引号包裹,SQL会将其识别为字段名而非值,且直接拼接变量存在注入风险,需用预处理语句。
修正后的insert.php代码:
<?php // 开启错误提示,方便调试 error_reporting(E_ALL); ini_set('display_errors', 1); // 避免未定义索引错误 $name = $_POST['name'] ?? ''; $email = $_POST['email'] ?? ''; $conn = new mysqli('Azure server URL', 'Username','Password', 'tableName'); // 检查数据库连接 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // 使用预处理语句,避免SQL注入并修正语法 $sql = "INSERT INTO data (id, name, email) VALUES (NULL, ?, ?)"; $stmt = $conn->prepare($sql); // "ss"表示两个参数均为字符串类型 $stmt->bind_param("ss", $name, $email); if ($stmt->execute()) { echo "data inserted"; } else { // 输出具体错误信息,便于排查问题 echo "failed: " . $stmt->error; } // 关闭语句与连接 $stmt->close(); $conn->close(); ?>
3. 额外调试建议
- 在PHP开头添加错误提示代码,能直接看到连接失败、SQL语法错误等具体信息;
- 将Ajax的
alert(data)替换为console.log(data),在浏览器控制台查看返回内容更清晰; - 确认Azure数据库防火墙已允许你的本地IP地址访问(Azure SQL需手动添加允许的IP规则)。
内容的提问来源于stack exchange,提问作者Jaf
相关产品推荐
相关产品推荐

