«Метод PDO не найден» внутри функции PHP (PhpStorm) - PullRequest
0 голосов
/ 18 ноября 2018

Я написал в 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;
}

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Вы пропускаете намеки на типы везде, чтобы PhpStorm (или даже человек) не мог сам разобраться.Вместо этого:

function count_series($db) {
}

... Я ожидаю увидеть что-то вроде:

function count_series(PDO $db): int {
}

... или хотя бы это (если вам нужно поддерживать более ранние версии PHP))

function count_series(PDO $db) {
}

Пожалуйста, замените PDO на фактическое имя класса, если это не так.

То же самое для доклоков (хотя на самом деле они избыточны, когда дело доходит до кода instellisense)если код самодокументируется).Вместо этого:

 * @param $db
 * @return mixed

... используйте это:

 * @param PDO $db
 * @return int
0 голосов
/ 18 ноября 2018

добавить внутрь попробовать return $pdo под $pdo = new PDO($dsn, $user, $pass, $options); А также внутри функции count_series() добавить $db=connect_db();

...