«Метод PDO не найден» внутри функции PHP (PhpStorm)

Я написал функцию на 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;
}

Можете ли вы поделиться кодом с помощью count_series? Похоже, что $db не является объектом PDOStatement.

Sebastian Brosch 18.11.2018 15:03

$ db = connect_db ('локальный хост', 'ddwt18_week1', 'ddwt18', 'ddwt18'); и $ serie_amount = count_series ($ db);

Thijmen 18.11.2018 15:12

Какой вывод var_dump($db); внутри count_series?

Sebastian Brosch 18.11.2018 15:14

Используйте правильные подсказки типа - либо родные PHP (где возможно), либо PHPDoc. Он легко решает такие вопросы.

LazyOne 18.11.2018 15:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
394
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Теперь я понимаю, в чем проблема: вы возвращаете $ count; это возвращает количество строк sql не выбирает count `$ row = $ query-> fetchAll (PDO :: FETCH_ASSOC); `и вернуть $ row

Abdullah Ockba 18.11.2018 15:28
Ответ принят как подходящий

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

function count_series($db) {
}

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

function count_series(PDO $db): int {
}

... или, по крайней мере, это (если вам нужно поддерживать более ранние версии PHP)

function count_series(PDO $db) {
}

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

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

 * @param $db
 * @return mixed

... использовать это:

 * @param PDO $db
 * @return int

Другие вопросы по теме