Нельзя использовать объект типа PDOStatement как массив

Я хочу проверить, содержит ли какой-либо столбец указателя пользователя значение, превышающее 0.

проблема

Выполняя запрос и выполняя его , я получаю эту ошибку:

Fatal error: Cannot use object of type PDOStatement as array in C:\xampp\htdocs\recover\admin\create.php on line 40 

Мой код (запрос + выполнить):

 if (isset($_SESSION['user'])) { $admin = $CONNECT_TO_DATABASE->prepare("SELECT * FROM admin WHERE username = :username"); $admin->bindValue(':username', $_SESSION['user']); $admin->execute(); 

Линия ошибки (40):

 if ($settings['create_admins'] > 0 || $admin['super_admin'] > 0 ) { 

Вопрос:

Почему я получаю эту ошибку? Как это исправить?

Я попытался сделать это:

 $admin = $CONNECT_TO_DATABASE->prepare("SELECT * FROM admin WHERE username = :username"); $admin = $admin->bindValue(':username', $_SESSION['user']); $admin = $admin->execute(); 

и получить еще одну ошибку:

 Fatal error: Call to a member function execute() on a non-object in C:\xampp\htdocs\recover\admin\create.php on line 38 

Благодаря!

EDIT: Мне нужен объект -> fetch, но я только что сделал это и избавился от ошибок. Но это не влияет? Я имею в виду, что я повторяю эту строку, и это дает мне нуль (ничего). Зачем?

 $admin = $CONNECT_TO_DATABASE->prepare("SELECT * FROM admin WHERE username = ".$_SESSION['user'].""); $admin = $admin->fetch(); 

Из:

 $admin = $CONNECT_TO_DATABASE->prepare("SELECT * FROM admin WHERE username = :username"); [...] if ($settings['create_admins'] > 0 || $admin['super_admin'] > 0 ) { 

$admin имеет тип PDOStatament который является классом, а не массивом. Поэтому вы не можете вызвать на нем оператор [] .

Также вы действительно не должны всегда присваивать $admin возвращаемому результату каждого метода, потому что большинство методов PDOStatament возвращают логические значения:

 $admin = $CONNECT_TO_DATABASE->prepare("SELECT * FROM admin WHERE username = :username"); $admin->bindValue(':username', $_SESSION['user']); $admin->execute(); 

Чтобы получить столбец super_admin из таблицы admin вы должны добавить (после оператора execute() ):

 $result = $admin->fetch(PDO::FETCH_ASSOC); 

который будет заполняться (надеюсь, это зависит от схемы таблицы) $result['super_admin'] .

попробуй это:

 $sql = "SELECT * FROM admin WHERE username = ?"; $stmt = $CONNECT_TO_DATABASE->prepare($sql); $stmt->execute(array($_SESSION['user'])); $admin = $stmt->fetch(); if($admin) { //do something if query returns row(s) }