Php 无法将PDOStatement类型的对象用作数组

Php 无法将PDOStatement类型的对象用作数组,php,mysql,pdo,Php,Mysql,Pdo,我想检查specify user的某列是否持有高于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->

我想检查specify user的某列是否持有高于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
谢谢

编辑:我需要->获取对象,但我刚刚完成了这项工作,并消除了错误。。但这不会影响到你吗?我的意思是我在重复那一行,它给了我一个空值。为什么?

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

$admin属于PDOStatement类型,它是类而不是数组。因此,您不能对其调用[]运算符

此外,您确实不应该总是将$admin分配给每个方法的返回结果,因为PDOStatement的大多数方法都返回布尔值:

$admin = $CONNECT_TO_DATABASE->prepare("SELECT * FROM admin WHERE username = :username");
$admin->bindValue(':username', $_SESSION['user']);
$admin->execute();
要从admin表中检索super_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)
}

PHP手册中有许多关于如何使用PDO检索行的示例。完全不需要猜测。我认为错误在这里$admin=$admin->execute;您不需要将execute的结果赋回$admin变量,只需在$admin=$admin->fetch之后调用executeMake var_dump$admin;然后查看输出。如果我删除$admin->之前的$admin=,我将得到相同的错误。@JonyKale那么您可能在查询时遇到问题。从管理员处更改prepareSELECT*,其中用户名=.$\u会话['user']。;使用prepareSELECT*FROM admin,其中username='.$\u SESSION['user'];如果我使用query而不是prepare呢?我刚刚更改了它,我得到了mysql的一个致命错误,致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42S22]:未找到列:C:\xampp\htdocs\recover\admin\create.php:36堆栈跟踪:0 C:\xampp\htdocs\recover\admin\create.php36:PDO->query'SELECT*FROM a...1{main}在第36I行的C:\xampp\htdocs\recover\admin\create.php中抛出,刚刚更改。$\u会话['user']。到“$\u会话['user']”,它就成功了。你说的if$admin是什么意思?我所要做的就是从指定用户的行中获取数据。如果查询没有返回任何行,if admin只是一个后备选项,这样$admin[somefield]就不会返回错误
$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)
}