Portál AbcLinuxu, 29. října 2025 12:12
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
Pomůžeš prosím ještě ? Díky
$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.