Я написал функцию на 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;
}
$ db = connect_db ('локальный хост', 'ddwt18_week1', 'ddwt18', 'ddwt18'); и $ serie_amount = count_series ($ db);
Какой вывод var_dump($db); внутри count_series?
Используйте правильные подсказки типа - либо родные PHP (где возможно), либо PHPDoc. Он легко решает такие вопросы.






добавить внутрь попробуйте return $pdo под $pdo = new PDO($dsn, $user, $pass, $options);
А также внутри функции count_series() добавить $db=connect_db();
Теперь я понимаю, в чем проблема: вы возвращаете $ count; это возвращает количество строк sql не выбирает count `$ row = $ query-> fetchAll (PDO :: FETCH_ASSOC); `и вернуть $ row
Вы опускаете указание типа везде, поэтому 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
Можете ли вы поделиться кодом с помощью
count_series? Похоже, что$dbне является объектомPDOStatement.