簡體   English   中英

不能使用PDOStatement類型的對象作為數組

[英]Cannot use object of type PDOStatement as array

我想檢查指定用戶的某些列是否保持高於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 = $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();

要從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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM