Jak se dostat k vystupu SQL dotazu?

Honza Pazdziora adelton na informatics.muni.cz
Úterý Září 14 15:36:25 MEST 1999


>  
> problem prvni: 
> pristupuji k databazi pres modul DBD::XBase.
> Po provedeni SQL dotazu SELECT se naplni asociativni pole dbRows:
> 
> @dbRows = $dataObject->fetchall_arrayref();
 ^^^				      ^^^^^

Funkce *arraref vraci referenci na pole, coz je skalar, nema tedy
smysl prirazovat do pole.

> a pak uz lze vysledek dotazu vyhodit do tabulky: 
> 
> foreach $rowReference (@dbRows)
>  {
>     foreach $columnReference (@$rowReference)
>      {
>             print qq!<TR>!;
>             foreach $column (@$columnReference)
>              {

Nazvy tech promennych mate matouci. Je to

	$db_rows = $dataObject->fetchall_arrayref('neco');

	for $row_ref (@$db_rows) {
		for $column ( @$row_ref ) {
			print $column;
		}
	}

> takto jsem to opsal z nejakeho prikladu a chodi to.
> 
> Muj problem je v tom, ze se potrebuji dostat ke konkretnim hodnotam, 
> driv nez zacnu vytvaret vystup. Jinymi slovy, jak se dostanu napr. k 
> hodnote 5. sloupce ve tretim zaznamu? Zkousel jsem vsechno mozny, 

	$db_rows->[2][4];

> napr.  $columnReference[4] nebo  $(@columnReference)[4] ale vzdycky 

Oba tyhle zapisy predpokladaji, ze existuje pole @columnReference, coz
neni pravda. Cili pokud pouzivate use strict, tak Vam to samozrejme
spadne.

> Dost dobre nechapu, jak to ze je ve vyse uvedenem prikladu treba 
> asociativni pole @dbRows projet trikrat prikazem foreach - podle mne 

Pozor! @dbRows by nebylo asociativni pole (hash), anybrz normalni pole
(ma za zacatku zavinac) a je to potreba projet trikrat jenom kvuli
tomu, ze jste si to tak napsal ;-)

> Precetl jsem si DBI.pm ale ze bych z toho byl moudrej..... 
> 
> Nevite se s tim nekdo rady? Urcite je to strasne jednoduchy.....

To jo -- zacnete tim, ze vysledek *arrayref priradite do skalaru.

> problem druhy:
> mohu v DBI pouzivat parametry SQL dotazu?

Ano.

> Jak se to dela?

Pouzijete placeholder (otaznik, :p1, :parametr) a pak bud bind_param
(resp. bind_parma_inout) nebo date parametry volanim execute, do,
select*, atp.

------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, DBI, Oracle, MySQL, auth. WWW servers, MTB, Spain, ...
------------------------------------------------------------------------


Další informace o konferenci Perl