2014-12-10 3 views
1

я получаю эту ошибку, когда я пытаюсь поставить id на кнопкуНевозможно использовать объект типа PDOStatement

Fatal error: Cannot use object of type PDOStatement as array... 

код где ошибка это

$pdo = Database::connect(); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $q = "SELECT * FROM books where user = '".$_SESSION['level']."'"; 

    if($res = $pdo->query($q)) 
    { 
     if($res->fetchColumn() > 0) 
     { 
       foreach($pdo->query($q) as $res) 
       { 
         echo '<a href="users/books.php?user_id='. $res['user_id'] .'"> '.$res['name'].' </a>';   
       } 
     } 
     else 
     { 
       echo '<a href="users/bookAdd.php?user_id='. $res['user_id'] .'">Create Book</a>'; 
     } 
    } 
    Database::disconnect(); 

То, что я пытаюсь, когда пользователь журнал, если нет книг, чтобы показать ему кнопку Create book. И ошибка есть в блоке else, где есть users/bookAdd.php?user_id='. $res['user_id'] .' Любая идея, как это исправить?

+0

возможно дубликат [PHP PDO с Еогеасп и принеси] (http://stackoverflow.com/questions/15385965/php-pdo-with-foreach- and-fetch) – webeno

+0

вы используете '$ pdo-> query ($ q)' непосредственно в 'foreach', который не будет работать ... см. дубликат i, который был выше ... – webeno

ответ

4

Ошибка уже понятна, вы не можете пытаться получить доступ к индексам в контексте объекта PDOStatement.

Вы не можете просто использовать ->query(), а затем попытаться получить доступ к значениям из созданного объекта. Вы еще не получили результаты.

Вам нужно получить результаты правильно:

$pdo = Database::connect(); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

// prep the statement 
$q = $pdo->prepare("SELECT * FROM books WHERE user = :level"); 
$q->bindParam(':level', $_SESSION['level']); // bind it 
$q->execute(); 
// fetch the results 
$results = $q->fetchAll(PDO::FETCH_ASSOC); 
if(count($results) > 0) { 
    foreach($results as $res) { 
     echo '<a href="users/books.php?user_id='. $res['user_id'] .'"> '.$res['name'].' </a>'; 
    } 
} else { 
    echo '<a href="users/bookAdd.php">Create Book</a>'; 
} 

Database::disconnect(); 
+0

, но я хочу пройти также user_id на bookAdd.php – Goro

+0

@Goro вы не можете передать ни одного идентификатора, так как нет результатов – Ghost

+0

@Goro что такое '$ _SESSION ['user']' anyways? это идентификатор пользователя? – Ghost

Смежные вопросы