首页 > 解决方案 > PHP 函数 (PhpStorm) 中的“找不到 PDO 方法”

问题描述

我在 php 中编写了一个函数,用于计算 MySQL 数据库中的行数,称为 count_series()。此函数工作正常,但是,PhpStorm 为以下以下函数提供了“未找到方法”错误:prepare()、execute()、rowCount()。

有谁知道这可能是什么原因?

/**
 * Connects to the database
 * @param $host
 * @param $db
 * @param $user
 * @param $pass
 * @return PDO
 */
function connect_db($host, $db, $user, $pass) {
    $charset = 'utf8mb4';

    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $options = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ];
    try {
        $pdo = new PDO($dsn, $user, $pass, $options);
    } catch (\PDOException $e) {
        echo sprintf("Failed to connect. %s",$e->getMessage());
    }
    return $pdo;
}


/**
 * Returns the amount of series in the database
 * @param $db
 * @return mixed
 */
function count_series($db) {
    $stmt = $db->prepare('SELECT COUNT(id) FROM ddwt18_week1.series');
    $stmt->execute();
    $count = $stmt->rowCount();
    return $count;
}

标签: phpmysqlfunctionpdophpstorm

解决方案


您到处都省略了类型提示,因此 PhpStorm(甚至是人类)无法自行解决。而不是这个:

function count_series($db) {
}

...我希望看到类似的东西:

function count_series(PDO $db): int {
}

...或者至少是这个(如果您需要支持早期的 PHP 版本)

function count_series(PDO $db) {
}

PDO如果不是那个,请用实际的类名替换。

对于 dobclocks 也是如此(尽管如果代码是自记录的,那么它们在代码智能感知方面实际上是多余的)。而不是这个:

 * @param $db
 * @return mixed

... 用这个:

 * @param PDO $db
 * @return int

推荐阅读