2013-04-02 85 views
1

我要检查是否指定用户的一些列被保持的值大于0不能使用类型PDOStatement对象的对象作为阵列

问题

当进行查询,然后执行它,即时得到这个错误:

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(); 
+0

有是如何与PDO检索行PHP手册的例子很多。绝对不需要猜测。 –

+0

我认为错误在这里$ admin = $ admin-> execute();你不需要将execute()的结果赋值给$ admin变量,只需调用execute() – jerjer

+0

在'$ admin = $ admin-> fetch();'后面加上'var_dump($ admin)',看看输出。 – Narek

回答

3

来自:

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

$adminPDOStatament型这是一种类,而不是阵列。因此您不能拨打[]运营商。

而且你应该不必总是分配$admin到每一个方法的返回结果,因为大多数的PDOStatament的方法返回布尔值:

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

为了取回adminsuper_admin列中,您应该添加(后​​发言):

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

将填充(希望,这取决于什么是表模式)$result['super_admin']

+0

如果我使用查询而不是准备,该怎么办?我只是改变了它,我得到了一个致命的错误的MySQL,致命的错误:未收集的异常'PDOException'与消息'SQLSTATE [42S22]:列未找到:1054未知列'jony'in'where子句'在C:\ xampp \ htdocs \ recover \ admin \ create.php:36堆栈跟踪:#0 C:\ xampp \ htdocs \ recover \ admin \ create.php(36):PDO-> query('SELECT * FROM a ...') #1 {main}抛出C:\ xampp \ htdocs \ recover \ admin \ create.php在第36行 –

+0

我刚刚更改了“。$ _ SESSION ['user']。” ''。$ _ SESSION ['user']。“'并且它工作。 –

+0

@downvoter介意解释倒票? – Shoe

2

试试这个:

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

if($ admin)是什么意思?我想要做的就是从指定用户的行中获取数据。 –

+0

如果管理员只是回退,如果您的查询不返回任何行,以便$ admin [somefield]不会返回错误 – jerjer

相关问题