【问题标题】:mysqli_stmt_init is throwing a warning in PhpStormmysqli_stmt_init 在 PhpStorm 中引发警告
【发布时间】:2019-01-02 01:24:35
【问题描述】:

我试图了解我是否在 mysqli_stmt_init 方法上做错了。

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

我已经对所有内容进行了三次检查,并在 Google 上搜索了很长一段时间,但没有找到 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);
    }

【问题讨论】:

  • 由于您使用的是mysqli_stmt_init() 的程序,它确实需要一个参数,我认为phpstorm 在这种情况下确实报告了一个不正确的警告。如果您查看文档:php.net/manual/en/mysqli.stmt-init.php,您将看到面向对象的对应部分根本不接受任何参数。因此,如果您确实写了类似$connect-&gt;stmt_init($connect); 的内容,那么警告将是有效的。

标签: php phpstorm signature


【解决方案1】:

如果您按住 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 的工作方式(使用嵌入式存根)使其很难解决,因为同一个方法不能在存根文件中有多个具有不同方法签名的实现。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2012-09-17
  • 2020-09-21
  • 2012-09-22
  • 2020-09-09
相关资源
最近更新 更多