【问题标题】:mysqli_query() expects at least 2 parameters, 1 givenmysqli_query() 至少需要 2 个参数,1 个给定
【发布时间】:2026-02-15 10:05:01
【问题描述】:

mysqli_query 命令导致以下错误

mysqli_query("INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 

警告:mysqli_query() 至少需要 2 个参数,其中 1 个给出

此错误消息是什么意思,如何解决?

【问题讨论】:

  • php.net/mysqli_query有答案(使用mysqli函数时需要明确指定链接)
  • 请注意,构建这样的查询将打开您的服务器以进行 SQL 注入,这可能足以让脚本小子破解您的服务器并窃取密码/将其用作僵尸网络的一部分/其他任何东西他们想要

标签: php mysqli


【解决方案1】:

您需要在页面前面的某个位置指定与数据库建立的连接。您应该将该变量放入查询中。假设您创建了一个名为$con 的变量。那么你的代码应该是这样的。

mysqli_query($con,"INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 

【讨论】:

    【解决方案2】:

    来自manual

    Procedural style
    
    mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )
    

    您会注意到 $link$query 变量。

    这意味着您需要向函数传递一个有效的 mysqli 链接资源以及您希望执行的查询。这让函数知道要使用哪个与服务器建立的连接。

    可以使用以下方法创建链接资源:

    仅程序样式:mysqli_connect() 返回的链接标识符 或 mysqli_init()

    有关如何执行此操作的示例,请参见上述手册页。

    【讨论】:

      【解决方案3】:

      您似乎将 mysql_query 与 mysqli_query 混淆了。前者接受 sql 语句作为第一个参数,而后者期望链接标识符(由 Mysqli::connect 创建)作为第一个参数,语句作为第二个参数。

      这两个扩展不兼容。我建议您选择一个,阅读有关如何连接、执行查询等的手册页,然后忘记另一个存在。选择哪一个由你决定,mysqli 功能更丰富,但结果更复杂。

      【讨论】:

        【解决方案4】:

        如果您遇到以下任何错误:

        mysqli_query() 至少需要 2 个参数,给定 1 个

        mysqli_select_db() 只需要 2 个参数

        mysqli_real_escape_string() 只需要 2 个参数

        这意味着您没有将强制参数传递给这些函数。 MySQLi 过程式函数要求第一个参数是有效的 MySQLi 连接链接。

        例如,mysqli_query 期望数据库链接作为第一个参数,实际 SQL 查询作为第二个参数。

        假设您在脚本开头的某处有此或类似的连接代码。

        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        $mysqli = mysqli_connect($host, $user, $pass, $db);
        mysqli_set_charset ($mysqli, 'utf8mb4');
        

        您可以使用保存在$mysqli 中的连接链接并将其作为第一个参数传递。

        mysqli_query($mysqli, "INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 
        

        大多数 mysqli 过程函数都需要将连接作为参数传递。但是,更简单的选择是切换到面向对象的样式。在 OOP 中,您调用对象上的方法,仅将 SQL 作为单个参数传递。

        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        $mysqli = new mysqli($host, $user, $pass, $db);
        $mysqli->set_charset('utf8mb4');
        
        $mysqli->query("INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 
        

        警告!

        您应该使用参数化的准备好的语句,而不是手动构建查询。 mysqli_query() 应该只在您没有向 SQL 传递任何输入时使用。每当您想传递输入时,例如INSERT,您必须使用参数绑定。您可以将 mysqli_query() 电话替换为:

        $stmt = $mysqli->prepare('INSERT INTO `counter`.`hits` (`page_hits`) VALUES (?)');
        $stmt->bind_param('s', $hits);
        $stmt->execute();
        

        【讨论】:

          【解决方案5】:

          mysqli_query除了2个参数,第一个变量是mysqli_connect等效变量,第二个是你提供的查询

          $name1 = mysqli_connect(localhost,db_username ,db_pswd ,db_name );
          
          $name2 = mysqli_query($name1,"INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)");
          

          【讨论】:

            最近更新 更多