2

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

2 回答 2

5

从:

$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();

要从表中检索super_admin列,admin您应该添加(在execute()语句之后):

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

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

于 2013-04-02T08:25:56.843 回答
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)
}
于 2013-04-02T08:30:23.283 回答