Я использую PDO и помещаю свой запрос в блок try, я его fetchAll(PDO::FETCH_ASSOC)
, а затем вызываю execute на нем, следующий fetchAll(PDO::FETCH_ASSOC)
на нем. с тем внутри строки мне нужен текст, который я поместил PHP в цикл foreach, с переменной $tools
виде $obj
. Я тогда "думал", что я звонил, когда я ввел в свой код переменную $obj
со ссылкой от mySQL "имя", "цена" и "код". ошибка просто выплескивания object(PDOStatement)#2(1){["queryString"]}=>...the Sql statmement.
строки запроса object(PDOStatement)#2(1){["queryString"]}=>...the Sql statmement.
try {
$tools = $dbh->prepare("SELECT t.item_code as code, t.item_name as
name, t.retail_price as retail,
t.sale_price as price, t.item_pieces as
pieces, t.qty as quantity,
t.sold as sold, b.brand as brand,
c.category as category
FROM Tools AS t
JOIN Images AS i ON t.t_id = i.t_id
JOIN Brands AS b ON t.b_id = b.b_id
JOIN Categories AS c ON t.c_id =
c.c_id
LEFT OUTER JOIN Types as tt ON tt.t_id = t.tt_id");
$tools->execute();
$tools->fetchAll(PDO::FETCH_ASSOC);
}catch (PDOException $e) {
echo 'unable to retrieve data';
echo $e->getMessage();
exit();
}
<?php
foreach($tools as $obj) {
?>
<div class="col-xs-12 col-sm-6 col-md-3">
<article class="card">
<p class="text-center">
Item: <?php echo $obj->name; ?><br>
Brand: <br>
Price: <?php echo $obj->price; ?><br>
<button class="btn btn-default btn-lg"
value="<?php echo $obj->name; ?>">
<a href="#"><?php echo $obj->code;
?></a>
</button>
</p>
</article>
</div>
<?php } ?>
кодовое сообщение с веб-страницей.
'object(PDOStatement)#2 (1) { ["queryString"]=> string(609) "SELECT t.item_code as code, t.item_name as name, t.retail_price as retail, t.sale_price as price, t.item_pieces as pieces, t.qty as quantity, t.sold as sold, b.brand as brand, c.category as category FROM Tools AS t JOIN Images AS i ON t.t_id = i.t_id JOIN Brands AS b ON t.b_id = b.b_id JOIN Categories AS c ON t.c_id = c.c_id LEFT OUTER JOIN Types as tt ON tt.t_id = t.tt_id" }'
$tools->fetchAll(PDO::FETCH_ASSOC);
это проблема. fetchAll
извлекает все строки из инструкции и возвращает их. Если вы собираетесь использовать его, вам нужно назначить результат этого выражения другой переменной, например:
$results = $tools->fetchAll(PDO::FETCH_ASSOC);
Затем вы можете foreach($results...
вместо foreach($tools...
Кроме того, вы должны просто удалить выражение fetchAll
. PDOStatement реализует traversable и может быть непосредственно повторен с помощью foreach после его выполнения без явного использования метода выборки.