mysqli_stmt_init 正在 PhpStorm 中发出警告

mysqli_stmt_init is throwing a warning in PhpStorm

我想了解我是否使用 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);
    }

如果您按住 CTRL 并单击 mysqli_stmt_init() 函数,您将看到 JetBrains 用于智能感知的嵌入式存根。

/**
 * 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 参数的过程版本。

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