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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:13:49