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

mysqli_query()需至少2个参数报错问题求助

解决 mysqli_query() 参数不足的报错问题

首先,咱们直接说报错的核心原因:mysqli_query() 函数必须传入至少两个参数——第一个是已经成功建立的数据库连接对象,第二个才是要执行的SQL查询语句。你当前的代码里只传了查询语句,漏掉了关键的连接对象 $link,这就是触发警告的直接原因。

第一步:修正 mysqli_query 的参数

把你代码里的这一行:

$result=mysqli_query($query);

修改为:

$result=mysqli_query($link, $query);

另外我还发现一个小笔误:你在判断连接是否成功时写的是 if(!link),这里少了变量的美元符号,应该改成 if(!$link),不然会触发“未定义常量”的额外错误,记得一起修正。

第二步:重要提醒——修复SQL注入风险

你的代码现在直接把用户输入的用户名和密码拼进SQL语句里,这存在严重的SQL注入漏洞,攻击者可以通过构造特殊输入窃取甚至破坏你的数据库数据。建议改用mysqli的预处理语句来替代直接拼接,示例代码如下:

if($_POST['cmdLogin']=="Login") {
    $txtUsername= $_POST['txtUsername'];
    $txtPassword= $_POST['txtPassword'];
    $database = "triumph";

    // 建立数据库连接
    $link=mysqli_connect("localhost","triumph","xxxx");
    if(!$link) {
        echo "Database connection error";
        exit; // 连接失败后终止后续代码执行,避免逻辑混乱
    }
    mysqli_select_db($link, $database);

    // 使用预处理语句避免SQL注入
    $query="SELECT std_uname,std_pwd,std_status, login_state FROM user_regd where std_uname=? and std_pwd =?";
    $stmt = mysqli_prepare($link, $query);
    // 绑定参数,"ss"代表两个参数都是字符串类型
    mysqli_stmt_bind_param($stmt, "ss", $txtUsername, $txtPassword);
    // 执行查询
    mysqli_stmt_execute($stmt);
    // 获取查询结果集
    $result = mysqli_stmt_get_result($stmt);

    // 后续可以根据结果处理登录逻辑
    if(mysqli_num_rows($result) > 0) {
        // 登录成功的处理逻辑
    } else {
        // 登录失败的处理逻辑
    }

    // 关闭语句和连接,释放资源
    mysqli_stmt_close($stmt);
    mysqli_close($link);
}

预处理语句会自动处理用户输入的转义操作,从根源上杜绝SQL注入问题,这是更安全规范的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:15:34