Я использую оператор подготовки PDO для выбора результата.
Мой index.php:
include('operations.php');
$userprofileobj = new operations();
if (isset($_SESSION['user_email']))
{
$results = $userprofileobj->verify_user('account',$_SESSION['user_email'])->fetch(PDO::FETCH_ASSOC);
echo $results['username'];
}
Мой файл operations.php:
<?php
include('userclass.php');
class operations extends userclass{
public function verify_user($table_name,$user_email)
{
$stmt = $this->con->prepare("select * from ".$table_name." where username = :user_email");
$stmt->execute([
':user_email' => $user_email,
]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
Я пытаюсь сопоставить электронную почту, и результат должен быть получен в index.php. Но у меня ошибка Неустранимая ошибка: вызов функции-члена fetchColumn () с логическим значением в файле operations.php в строке 84.






$result = $this->con->prepare("select * from ".$table_name." where username = :user_email");
$result = $result->execute(..)
Вы перезаписываете $ result. $ This-> con-> prepare (..) устанавливает $ result как выражение PDO (см. http://php.net/manual/en/pdo.prepare.php). Объект PDO Statement имеет метод -> execute (...), который возвращает логическое значение (true / false), а также метод -> fetchColumn (). Когда вы выполняете свой execute (), вы перезаписываете свой объект оператора PDO результатом выполнения execute (), который является только логическим и не имеет вообще никаких методов. Вот почему $ result не имеет метода -> fetchColumn ().
Спасибо за ответ .. но какое решение.
Самый простой способ - превратить $ result = $ result-> execute (..) в $ result-> execute (..), однако @ArtisticPhoenix более подробно описывает свой ответ.
Это не самое простое. Это всего лишь одна из вещей, которые необходимо сделать. Изменение этого не меняет того факта, что они возвращают $result, который не является «результатом» операции fetch *. Другими словами, исправление, которое возвращало бы объект Statement после того, как указатель перемещается за первую строку, и вы не можете перемотать курсор для PDO. Кроме того, использование fetchColumn, когда запрос не имеет ограничений и извлекает все поля, означает, что либо запрос не является оптимальным, либо используется неправильный метод выборки.
это не имеет значения