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
相关产品推荐
相关产品推荐

