Я хочу проверить, содержит ли какой-либо столбец указателя пользователя значение, превышающее 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) }