使用PHP远程连接MySQL数据库并实现跨机网页交互的技术问题
嘿,看起来你已经搞定了远程MySQL的命令行连接,这很棒!接下来咱们把这个能力迁移到PHP网页上,实现数据列表展示和数据添加功能。我会基于你的需求给出完整的可运行代码,同时附上关键注意事项。
实现跨机器PHP-MySQL交互:列表展示与数据添加
1. 完整的PHP数据库连接(带错误处理)
首先补全你给出的连接代码,这里推荐使用mysqli扩展(mysql扩展已被废弃),适配你的空密码和远程主机配置:
<?php // 数据库配置 $hostname = '192.168.2.2'; $username = 'root'; $password = ''; // 对应你命令行的空密码 $dbname = 'proyectoti'; // 创建mysqli连接 $conn = new mysqli($hostname, $username, $password, $dbname); // 检查连接状态 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } ?>
2. 整合列表展示与数据添加功能
下面是包含HTML界面、数据查询展示、表单提交处理的完整代码(假设你的目标表是products,如果你的表名/字段不同,直接替换即可):
<?php // 数据库连接代码 $hostname = '192.168.2.2'; $username = 'root'; $password = ''; $dbname = 'proyectoti'; $conn = new mysqli($hostname, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 处理数据添加请求 if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['submit'])) { // 使用预处理语句防止SQL注入,这是核心安全要求! $name = $_POST['name']; $description = $_POST['description']; $stmt = $conn->prepare("INSERT INTO products (name, description) VALUES (?, ?)"); $stmt->bind_param("ss", $name, $description); // "ss"表示两个字符串类型参数 if ($stmt->execute()) { // 添加成功后刷新页面 echo "<script>alert('数据添加成功!'); window.location.href='{$_SERVER['PHP_SELF']}';</script>"; } else { echo "添加失败: " . $stmt->error; } $stmt->close(); } // 查询数据用于展示 $sql = "SELECT * FROM products"; $result = $conn->query($sql); ?> <!DOCTYPE html> <html> <head> <title>数据库数据管理</title> <style> table { border-collapse: collapse; width: 80%; margin: 20px auto; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th { background-color: #f2f2f2; } .form-container { width: 50%; margin: 0 auto; } input, textarea { width: 100%; padding: 8px; margin: 5px 0; box-sizing: border-box; } </style> </head> <body> <h2 style="text-align:center;">数据库数据列表</h2> <table> <tr> <th>ID</th> <th>名称</th> <th>描述</th> </tr> <?php if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "<tr> <td>" . $row["id"] . "</td> <td>" . $row["name"] . "</td> <td>" . $row["description"] . "</td> </tr>"; } } else { echo "<tr><td colspan='3'>暂无数据,请添加第一条记录</td></tr>"; } ?> </table> <h3 style="text-align:center;">添加新数据</h3> <div class="form-container"> <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <label for="name">名称:</label> <input type="text" id="name" name="name" required> <label for="description">描述:</label> <textarea id="description" name="description" rows="3" required></textarea> <input type="submit" name="submit" value="添加数据" style="width: auto; cursor: pointer;"> </form> </div> </body> </html> <?php // 关闭数据库连接 $conn->close(); ?>
关键注意事项
- 安全优先级:
- 你当前使用
root用户+空密码的配置绝对不能用于生产环境!建议创建一个仅拥有proyectoti数据库读写权限的专用用户,设置强密码。 - 代码中使用的预处理语句是防止SQL注入的核心手段,绝对不要直接拼接用户输入到SQL语句中。
- 你当前使用
- PHP环境配置:确保你的PHP服务器已启用
mysqli扩展(大部分现代PHP环境默认开启,若未开启需在php.ini中添加extension=mysqli)。 - 远程权限验证:虽然你能通过命令行连接,但要确认PHP服务器的IP已被MySQL授权访问。可在MySQL中执行:
GRANT ALL ON proyectoti.* TO 'your_user'@'PHP_SERVER_IP' IDENTIFIED BY 'your_strong_password'; FLUSH PRIVILEGES; - 错误处理优化:生产环境不要直接输出数据库错误信息(比如
$conn->connect_error),建议将错误记录到日志文件中,避免泄露敏感信息。
内容的提问来源于stack exchange,提问作者Santiago Troitiño Cristancho
相关产品推荐
相关产品推荐

