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

MySQL代码转MySQLi及代码错误排查求助

没问题,我帮你把这段老旧的MySQL扩展代码转换成符合现代标准的MySQLi版本,顺便修复几个潜在的问题,让代码更安全、更易维护:

先说明原代码的核心问题

  • 使用了PHP 7+已完全移除的mysql_*废弃函数,这是你遇到错误的直接原因
  • 直接将用户输入拼入SQL语句,存在严重的SQL注入风险
  • 滥用@错误抑制符,会隐藏调试关键信息,不利于排查问题
  • 存在拼写错误:"ture"应为"true"
  • 空的if语句没有实际处理逻辑,属于无效代码

转换后的MySQLi版本(面向对象风格,推荐)

首先要确保先建立数据库连接(替换成你的数据库信息),然后处理表单逻辑:

session_start(); // 必须先启动会话,否则无法使用$_SESSION

// 建立MySQLi连接(面向对象写法)
$mysqli = new mysqli('localhost', '你的数据库用户名', '你的数据库密码', '你的数据库名');

// 检查连接是否成功
if ($mysqli->connect_error) {
    die('数据库连接失败: ' . $mysqli->connect_error);
}

if (isset($_POST["B1"]) && $_SESSION["done"] !== "true") {
    // 清理并获取用户输入,避免空字符干扰
    $username = trim($_POST['T2']);
    $password = trim($_POST['T3']);

    // 处理空输入(原代码是空语句,这里补充实际逻辑)
    if (empty($username) || empty($password)) {
        echo "用户名和密码不能为空,请重新输入";
        exit;
    }

    // 使用预处理语句彻底避免SQL注入(核心改进)
    $stmt = $mysqli->prepare("SELECT id FROM user WHERE username = ?");
    $stmt->bind_param("s", $username); // "s"表示绑定字符串类型参数
    $stmt->execute();
    $result = $stmt->get_result();
    $num = $result->num_rows;

    // 这里可以添加后续逻辑,比如判断用户是否存在、验证密码等
    if ($num > 0) {
        $user = $result->fetch_assoc();
        // 推荐使用password_verify()验证哈希密码(如果你的密码是用password_hash()存储的)
        // if (password_verify($password, $user['password'])) { ... }
    } else {
        echo "该用户名不存在";
    }

    // 关闭语句和连接,释放资源
    $stmt->close();
    $mysqli->close();
}

如果你习惯面向过程风格,也可以用这个版本

session_start();

// 建立面向过程的MySQLi连接
$conn = mysqli_connect('localhost', '你的数据库用户名', '你的数据库密码', '你的数据库名');
if (!$conn) {
    die('数据库连接失败: ' . mysqli_connect_error());
}

if (isset($_POST["B1"]) && $_SESSION["done"] !== "true") {
    $username = trim($_POST['T2']);
    $password = trim($_POST['T3']);

    if (empty($username) || empty($password)) {
        echo "用户名和密码不能为空,请重新输入";
        exit;
    }

    $stmt = mysqli_prepare($conn, "SELECT id FROM user WHERE username = ?");
    mysqli_stmt_bind_param($stmt, "s", $username);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $num = mysqli_num_rows($result);

    // 后续逻辑...

    mysqli_stmt_close($stmt);
    mysqli_close($conn);
}

关键改进点总结

  • 完全替换废弃的mysql_*函数为MySQLi方法,兼容PHP 7及以上版本
  • 使用预处理语句绑定参数,彻底杜绝SQL注入风险
  • 移除@错误抑制符,添加明确的错误检查,方便调试
  • 修正拼写错误,补充空输入的处理逻辑
  • 推荐使用password_hash()和password_verify()处理密码,这是现代PHP的安全标准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:27