Portál AbcLinuxu, 12. května 2025 07:46
function ... () { $obj = false ; $sql = "SELECT * FROM site ORDER BY id ASC"; $stmt = $this->pdo->prepare($sql); $stmt->execute(); if ($stmt->rowCount() != 0){ $obj = $stmt->fetch( \ PDO :: FETCH_OBJ); } return $obj ; }Pomůže prosím někdo ? Děkuji
Řešení dotazu:
function ... () { $sql = "SELECT * FROM site ORDER BY id ASC"; $stmt = $this->pdo->prepare($sql); $stmt->execute(); return $stmt->fetchAll(\PDO::FETCH_OBJ); }
PDO::FETCH_GROUP
, viz fetchAll(). Jako první sloupec v SELECTu musí být ten klíčový.
$obj = $stmt->fetchAll( \ PDO :: FETCH_GROUP);ale zase vkládá čísla mezi každý sloupec
$data = $stmt->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_UNIQUE);
fetchAll() v principu nemůže vracet objekt, ale jen kolekci. To jen pro upřesnění.Aha a co tedy použít místo fetchAll().
***********
použití$data = $stmt->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_UNIQUE);
$obj = $stmt->fetchAll(\PDO::FETCH_GROUP);nebo
$obj = $stmt->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_UNIQUE);je vcelku jedno, stejně mezi každý název sloupce vkládá číselné pořadí sloupce i s jeho hodnotou :(
Nedává. Podívej se pořádně. Jako klíč je použita hodnota z prvního sloupce. Schválně jsem si to vyzkoušel, abych si ověřil, že nekecám:$obj = $stmt->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_UNIQUE);je vcelku jedno, stejně mezi každý název sloupce vkládá číselné pořadí sloupce i s jeho hodnotou :(
<?php $db = new \PDO('mysql:host=localhost;dbname=test;charset=UTF8'); $select = $db->prepare('SELECT name, id, author_id FROM book'); $select->execute(); $data = $select->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_UNIQUE | \PDO::FETCH_ASSOC); print_r($data);Výsledek:
Array ( [Babička] => Array ( [id] => 1 [author_id] => 1 ) [Divá Bára] => Array ( [id] => 2 [author_id] => 1 ) [Válka s mloky] => Array ( [id] => 4 [author_id] => 2 ) )Kde vidíš pořadí sloupce i s jeho hodnotou?
FETCH_ASSOC
použít FETCH_OBJ
, abys měl kolekci objektů.
Kde vidíš pořadí sloupce i s jeho hodnotou?Díky, teď už nikde, jelikož se taky tohle
$data = $select->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_UNIQUE | \PDO::FETCH_ASSOC);vypisuje jinak než tohle..
$data = $select->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_UNIQUE);A lépe ta data získat nepůjdou, jo? Abych mohl použít
echo $data->babicka->author_id ;
<?php // ... $data = (object) $select->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_UNIQUE | \PDO::FETCH_OBJ); echo $data->Babička->author_id;Jen to není příliš rozumné řešení, protože to má několik nevýhod - například se to nedá procházet přes foreach. Blbě se řeší neexistující klíče. Kolekce je v daném případě prostě výhodnější.
FETCH_ARRAY
nebo FETCH_ASSOC
a kdy FETCH_OBJ
. PDO je hodně chytrá třída, se kterou se dají dělat kouzla. Taková, že se z ORM stanou jen nesmyslné kusy kódu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.