Jak na správný dibi sql dotaz, vraci neuplné vysledky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
KillPrd
Začátečník | 110
+
0
-

Ahojte mám problém snažím se naplnit pole dotazem:

<?php
$items = dibi::query('SELECT id FROM galerie WHERE s_inzerce=%s', $id)->fetch();
?>

v databázy mám 17 výsledků a dibi mi vrati pouze jeden.
Var_dump mi vraci toto:

<?php
object(DibiRow)#35 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "368" } }
?>

Takže to vypada na špatný dotaz, leč když zadám dibi::test tak to dotaz vypíše dobře:

<?php
$items = dibi::test('SELECT id FROM galerie WHERE s_inzerce=%s', $id);
?>
SELECT id
FROM galerie
WHERE s_inzerce='47'

Abych pravdu řekl tak pokud vracím pomoci dotazu informace přímo do šablony tak to funguje bez problému. dá se říci že nejsem schopen naplnit pouze tuto proměnnou ($items) tak aby načetla všechny výsledky.

Pokud změním dotaz na:

<?php
$items = dibi::query('SELECT id FROM galerie WHERE s_inzerce=%s', $id)->fetchAll();
?>

Tak se zdá že počet výsledku je 17 leč prozměnu je špatně načtené pole viz var_dump:

array(17) { [0]=>  object(DibiRow)#37 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "368" } } [1]=>  object(DibiRow)#51 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "367" } } [2]=>  object(DibiRow)#52 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "366" } } [3]=>  object(DibiRow)#53 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "365" } } [4]=>  object(DibiRow)#54 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "364" } } [5]=>  object(DibiRow)#55 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "363" } } [6]=>  object(DibiRow)#56 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "362" } } [7]=>  object(DibiRow)#57 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "361" } } [8]=>  object(DibiRow)#58 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "360" } } [9]=>  object(DibiRow)#59 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "359" } } [10]=>  object(DibiRow)#60 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "358" } } [11]=>  object(DibiRow)#61 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "357" } } [12]=>  object(DibiRow)#62 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "356" } } [13]=>  object(DibiRow)#63 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "355" } } [14]=>  object(DibiRow)#64 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "354" } } [15]=>  object(DibiRow)#65 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "353" } } [16]=>  object(DibiRow)#66 (1) { ["storage":"ArrayObject":private]=>  array(1) { ["id"]=>  string(3) "352" } } }

Editoval KillPrd (13. 9. 2010 8:37)

westrem
Člen | 398
+
0
-

No vsak ale robis jednoduchy fetch, nahrad ho tymto:

$items = dibi::query('SELECT id FROM galerie WHERE s_inzerce=%s', $id)->fetchAll();

Fetch vzdy zoberie len jeden riadok, kdezto fetchAll zoberie vsetky ..

Editoval westrem (13. 9. 2010 8:36)

KillPrd
Začátečník | 110
+
0
-

Celý kod mám takto:

<?php
$fotky = dibi::query('SELECT id FROM galerie WHERE s_inzerce=%s', $this->params['id'])->fetchAll();
			$obra = array();
		 	foreach ($fotky as $ide) {
					$dir = WWW_DIR;

					$path = $dir.'/files/file/' .$ide . '.thumbnail.jpg';
					$image = Image::fromFile($dir.'/files/file/' . $ide . '.jpg');
					$image->resize(150, 100);
					$image->save($path);
					$obra[]=$path;


			}//foreach

			//var_dump($fotky);
			$this->template->pocet = count($fotky);
			$this->template->images = $obra;
?>

pak mi to píše chybovou hlášku:
Object of class DibiRow could not be converted to string
v tomto řádku:
$path = $dir.‚/files/file/‘ .$ide . ‚.thumbnail.jpg‘;

Problém je že nevím jak postupovat při odladování s dibi nemám ještě takové zkušenosti…

Editoval KillPrd (13. 9. 2010 8:46)

iguana007
Člen | 970
+
0
-

KillPrd napsal(a):

Celý kod mám takto:

Uprav to takto:

<?php
$fotky = dibi::fetchAll('SELECT id FROM galerie WHERE s_inzerce=%s', $this->params['id']);
                        $obra = array();
                        foreach ($fotky as $ide) {
                                        $path = WWW_DIR.'/files/file/' .$ide->id . '.thumbnail.jpg';
                                        $image = Image::fromFile(WWW_DIR.'/files/file/' . $ide->id . '.jpg');
                                        $image->resize(150, 100);
                                        $image->save($path);
                                        $obra[]=$path;
                        }//foreach
                        //var_dump($fotky);
                        $this->template->pocet = count($fotky);
                        $this->template->images = $obra;
?>

Nemůžeš totiž volat samotné $ide, když je to objekt.
A pokud sloupec s_inzerce obsahuje čísla, tj. je typu Integer, tak bys měl v dotazu použít místo %s toto: %i

Editoval iguana007 (13. 9. 2010 9:06)

KillPrd
Začátečník | 110
+
0
-

To je prda to by mě teda zajimalo kdybych na to přišel a jak :) děkuji…