代码之家  ›  专栏  ›  技术社区  ›  Ricardo

mysqli_stmt_init在PhpStorm中发出警告

  •  0
  • Ricardo  · 技术社区  · 6 年前

    我想知道我是否做错了 mysqli_stmt_init 方法。

    一切正常,但PhpStorm一直在显示 Method call uses 1 parameters, but method signature uses 0 parameters . 那是什么意思?

    我已经三次检查了所有东西,并在谷歌上搜索了相当长的一段时间,但没有结果说明为什么PhpStorm会发出这个警告。

    function mysqliConnect(){
        $connect = mysqli_connect(dbhost,dbuser,dbpass,dbname);
        if (mysqli_connect_errno()) {
            echo `Failed to connect to MySql with erro: ` . mysqli_connect_error();
        }
        mysqli_set_charset($connect, 'utf8mb4');
        return $connect;
    }
    
        $connect = mysqliConnect();
        $uid = mysqli_real_escape_string($connect, $uid);
    
        $query = "SELECT * FROM `user` WHERE uid = ?";
        $stmt = mysqli_stmt_init($connect); // <-- WARNING
        if (!mysqli_stmt_prepare($stmt, $query)) {
            echo 'SQL Error';
        } else {
            mysqli_stmt_bind_param($stmt, 'i',$uid);
            mysqli_stmt_execute($stmt);
            $result = mysqli_stmt_get_result($stmt);
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Daniel user3757731    6 年前

    如果您按住CTRL键并单击 mysqli_stmt_init() 函数可以看到JetBrains用于intellisense的嵌入存根。

    /**
     * Initializes a statement and returns an object for use with mysqli_stmt_prepare
     * @link http://fr2.php.net/manual/en/mysqli.stmt-init.php
     * @return mysqli_stmt
     */
    function mysqli_stmt_init () {}
    

    它们只有一个没有参数的实现(面向对象版本使用的实现),而没有接受一个mysqli参数的过程版本。

    这显然是一个bug,但是Jetbrains Intellisense的工作方式(使用嵌入的存根)使得它很难解决,因为同一个方法不能在存根文件中有多个具有不同方法签名的实现。