不能使用PDOStatement类型的对象作为数组

时间:2013-04-02 08:16:52

标签: php mysql pdo

我想检查指定用户的某些列是否保持高于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

谢谢!

编辑:我需要 - > fetch对象,但我刚刚完成了这个,并且摆脱了错误..但它不会影响?我的意思是我回应那一行,它给了我一个空(没有)。为什么呢?

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

2 个答案:

答案 0 :(得分:4)

自:

$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']

答案 1 :(得分:3)

试试这个:

$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)
}