Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

PostgreSQL-funktionern

0 views
Skip to first unread message

Jonas Koch Bentzen

unread,
Nov 9, 2001, 2:45:21 PM11/9/01
to
Er det bare mig, eller er PHP's PostgreSQL-funktioner exceptionelt
dårligt lavet sammenlignet med PHP's MySQL-funktioner?

Jeg har brugt MySQL længe, og er først nu halvvejs ved at gå over til
PostgreSQL, men PostgreSQL-funktionerne er efter min mening slet ikke
så nemme og hurtige at arbejde med som MySQL-funktionerne. Et par
eksempler:

- Det er dødirriterende altid at skulle angive forbindelses-ID'et i
pg_exec og andre funktioner. I MySQL-funktionerne er forbindelses-ID'et
et valgfrit argument.

- Hvis man (som jeg) hører til dem, der bruger store bogstaver i
variabelnavne ("$toOrd" i stedet for "$to_ord"), så er man måske også
tilbøjelig til at bruge store bogstaver i SQL-kolonnenavne (f.eks.
"antalBesoeg"). Problemet er bare, at man med PostgreSQL-funktionerne
ikke kan skrive

echo $res["antalBesoeg"];

Man *skal* skrive kolonnenavnet med småt:

echo $res["antalbesoeg"];

(Nu har jeg lige undersøgt det, og det viser sig, at det ikke PHP's
skyld, men PostgreSQLs. Ikke desto mindre synes jeg, det er et
irriterende problem).

- I pg_fetch_* er man tvunget til at angive rækkenummer. Det giver
ekstra kode. For at gøre det hele værre skriver pg_fetch_* en
fejlmeddelelse, hvis man angiver et forkert rækkenummer.
(MySQL-versionen returnerer bare falsk). Det betyder, at man er tvunget
til at bruge snabel-a'et foran pg_fetch_*, hvis man vil skrive
funktionen direkte i løkken:

for ($i = 0; $res = @pg_fetch_array($query, $i, PGSQL_ASSOC); $i++) {
echo $res["by"];
}

Den tilsvarende MySQL-kode:

while ($res = mysql_fetch_assoc($query)) {
echo $res["by"];
}

Hvad gør jer, der bruger PostgreSQL? Bruger i PostgreSQL-funktionerne,
PEAR-funktionerne eller jeres helt egen klasse?

--
Jonas Koch Bentzen

http://understroem.dk/

Lars Petersen

unread,
Nov 9, 2001, 3:51:47 PM11/9/01
to
<klip>

> - Det er dødirriterende altid at skulle angive forbindelses-ID'et i
> pg_exec og andre funktioner. I MySQL-funktionerne er forbindelses-ID'et
> et valgfrit argument.
<klip>

Jo du har ret. Jeg har to ord til dig:

Database Abstraktion

=) Det er sagen! Du kan vælge at kode din egen, bruge PEAR,
eller downloade min: http://ekspert.coder.dk/global.db.phps
Så kan du skifte mellem mysql og postgresql som du lyster (hvis
du bruger kompatibelt SQL)...

=)

--
-
Lars
http://coder.dk/sohofaq.php - Uofficiel WOL SOHO 77 FAQ
http://wshlman.moons.dk/ - Say goodbye to GameSpy - A Free Half Life
Manager!
When mailing me, remember there is no truth in my mail!


Thomas Jensen - pil.dk

unread,
Nov 9, 2001, 4:33:04 PM11/9/01
to
On Fri, 9 Nov 2001 21:51:47 +0100, "Lars Petersen"
<la...@TRUTHioflux.net> wrote:

><klip>
>> - Det er dødirriterende altid at skulle angive forbindelses-ID'et i
>> pg_exec og andre funktioner. I MySQL-funktionerne er forbindelses-ID'et
>> et valgfrit argument.
><klip>
>
>Jo du har ret. Jeg har to ord til dig:
>
> Database Abstraktion
>
>=) Det er sagen! Du kan vælge at kode din egen, bruge PEAR,
>eller downloade min: http://ekspert.coder.dk/global.db.phps
>Så kan du skifte mellem mysql og postgresql som du lyster (hvis
>du bruger kompatibelt SQL)...

<shameless plug>
http://freshmeat.net/projects/php-dbi/
</shameless plug>
--
med venlig hilsen
Thomas Jensen
http://pil.dk/nyhedsbreve/2001oktober.php

Mads Lie Jensen

unread,
Nov 9, 2001, 4:36:20 PM11/9/01
to
On Fri, 09 Nov 2001 20:45:21 +0100, Jonas Koch Bentzen
<ingen.ema...@eksempel.dk> wrote:

>Hvad gør jer, der bruger PostgreSQL? Bruger i PostgreSQL-funktionerne,
>PEAR-funktionerne eller jeres helt egen klasse?

Jeg bruger disse database-klasser:
http://freshmeat.net/projects/php-dbi/

Men det jeg finder mest irriterende ved postgresql er at dens LIMIT er
modsat mysql's:

MySQL: SELECT.. LIMIT offset, antal;
PostgreSQL: SELECT.. LIMIT antal, offset;

Det er en pain in the ... når man roder med begge databaserne.. Men
selvfølgelig kun indtil man smider en funktion ind i sin
database-klasse som tager hånd om problemet :-)

--
Mads Lie Jensen - ma...@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk

Directory Opus - nu også til windows - http://www.gpsoft.com.au

Lars Petersen

unread,
Nov 9, 2001, 4:51:02 PM11/9/01
to
> Men det jeg finder mest irriterende ved postgresql er at dens LIMIT er
> modsat mysql's:
>
> MySQL: SELECT.. LIMIT offset, antal;
> PostgreSQL: SELECT.. LIMIT antal, offset;

Det er da logisk?

SELECT id FROM tabel LIMIT 5
tager 5
SELECT id FROM tabel LIMIT 5,10
tager 5, starter fra 10 ;)

Det er MySQL der er ulogisk :)
Og Oracle er bare sux ;P

Mads Lie Jensen

unread,
Nov 9, 2001, 5:35:57 PM11/9/01
to
On Fri, 9 Nov 2001 22:51:02 +0100, "Lars Petersen"
<la...@TRUTHioflux.net> wrote:

>> Men det jeg finder mest irriterende ved postgresql er at dens LIMIT er
>> modsat mysql's:
>>
>> MySQL: SELECT.. LIMIT offset, antal;
>> PostgreSQL: SELECT.. LIMIT antal, offset;
>
>Det er da logisk?
>
> SELECT id FROM tabel LIMIT 5
>tager 5
> SELECT id FROM tabel LIMIT 5,10
>tager 5, starter fra 10 ;)
>
>Det er MySQL der er ulogisk :)

Ved nærmere eftertanke har du jo ret :-)
Men det bliver det desværre ikke mindre irriterende af når/hvis man
skal flytte noget fra mysql til postgresql (eller omvendt)

>Og Oracle er bare sux ;P

?

Jonas Koch Bentzen

unread,
Nov 9, 2001, 5:51:37 PM11/9/01
to
Lars Petersen skrev:

>
> Jeg har to ord til dig:
>
> Database Abstraktion

Det er nu i ét ord, men lad dét nu være... : )

> =) Det er sagen! Du kan vælge at kode din egen, bruge PEAR,

Jeg har tænkt på at bruge PEAR. Den manglende dokumentation irriterer
mig bare (også fordi der bruges forskellig kode i de forskellige
vejledninger, man kan finde på nettet. Det skyldes sandsynligvis, at
PEAR-klasserne er gået igennem en del ændringer). Og så er jeg også
lidt bange for hastigheden. Er der nogen, der har undersøgt, om der er
hastighedsproblemer ved brug af PEAR-databaseklasserne?

Lars Petersen

unread,
Nov 9, 2001, 6:26:07 PM11/9/01
to
> > SELECT id FROM tabel LIMIT 5
> >tager 5
> > SELECT id FROM tabel LIMIT 5,10
> >tager 5, starter fra 10 ;)
> >
> >Det er MySQL der er ulogisk :)
>
> Ved nærmere eftertanke har du jo ret :-)

Hehhe :-)

> Men det bliver det desværre ikke mindre irriterende af når/hvis man
> skal flytte noget fra mysql til postgresql (eller omvendt)

Det har du ret i!!

> >Og Oracle er bare sux ;P
> ?

Bare min mening om Oracle ;)

Christian Joergensen

unread,
Nov 10, 2001, 8:25:11 AM11/10/01
to
Jonas Koch Bentzen <ingen.ema...@eksempel.dk> wrote:

> Den manglende dokumentation irriterer mig bare

I al ydmyghed: <http://razor.dk/php/pear/>

:)

--
Christian Jørgensen / Do not look into the laser with remaining eye!
http://www.razor.dk /

Jonas Koch Bentzen

unread,
Nov 10, 2001, 9:44:14 AM11/10/01
to
Christian Joergensen skrev:

> Jonas Koch Bentzen <ingen.ema...@eksempel.dk> wrote:
>
>> Den manglende dokumentation irriterer mig bare
>
> I al ydmyghed: <http://razor.dk/php/pear/>

I al venlighed: Der er visse ting, der ikke stemmer overens med
http://phpbuilder.com/columns/allan20010115.php3?page=2 : )

Hvem der har "ret", ved jeg ikke - det er sådan set også ligegyldigt,
men det ville være rart at vide, hvad der var det rigtige.

PHPBuilders version:

$sql = 'SELECT * FROM demo';
$demoResult = $db->query($sql);
while ($demoRow = $demoResult->fetchRow()) {
echo $demoRow[2] . '<br>';
}

Din version:

$sth = $dbh->query("SELECT wolla, jalla FROM tabel");
while ($res = $sth->fetchRow($row, DB_FETCHMODE_ASSOC)) {
print "$row[wolla] : $row[jalla]<BR>\n";
}

Det er fetchRow-metoden, I tilsyneladende er uenige om. Christian, hvad
bruger du egentlig $res-variablen til i ovenstående eksempel?

Da jeg skulle teste PEAR-klasserne i går, brugte jeg en mellemting
mellem din og PHPBuilders kode:

$query = $db->query("SELECT * FROM testtabel");
while ($res = $query->fetchRow(DB_FETCHMODE_ASSOC)) {
print_r($res);
}

Læg mærke til, at jeg har flyttet DB_FETCHMODE_* hen som første
argument til fetchRow() - og det virker faktisk (ligesom det også
virker helt at udelade DB_FETCHMODE_*, sådan som PHPBuilder har gjort
det).

Jonas Koch Bentzen

unread,
Nov 10, 2001, 9:48:11 AM11/10/01
to
Christian Joergensen skrev:

>
> I al ydmyghed: <http://razor.dk/php/pear/>

Du har på siden skrevet en masse forskellige variationer af
forbindelsesstrengen, men der mangler en, hvor værtsnavnet *ikke* er
inkluderet. Hvis man ikke kører PostgreSQL via TCP, så kan man ikke
forbinde til PostgreSQL-serveren, hvis man angiver et værtsnavn (f.eks.
"localhost". Derfor brugte jeg følgende forbindelsesstreng:

$db = DB::connect("pgsql://brugernavn@/database");

- og det virkede fint.

Niels Andersen

unread,
Nov 12, 2001, 10:07:30 AM11/12/01
to
"Lars Petersen" <la...@TRUTHioflux.net> wrote in message
news:adYG7.1718$Gt.8...@news000.worldonline.dk...

> > MySQL: SELECT.. LIMIT offset, antal;
> > PostgreSQL: SELECT.. LIMIT antal, offset;
> Det er da logisk?

Rækkefølgen er såmen ikke så vigtig. Hovedsagen er, at man er enig.
Dermed fejler begge... :)

Eller rettere: Hvad siger SQL-standarden, og hvorfor bliver den ikke
fulgt?

--
Mvh.

Niels Andersen


Svenne Krap

unread,
Nov 12, 2001, 12:16:45 PM11/12/01
to

Iflg. PGSQL-devel listen er ingen af delene standard. Derfor har bl.a.
oracle det heller ikke...

PGSQL folkene er megt uenige med sig selv om, hvordan man løser det,
men de er vist blevet (delvist) enige om, at man i fremtiden fjerner

"limit xx,yy" helt og i stedet bruger

"limit xx offset yy " - prøver man den første vil der komme en
advarsel. Den vil dog virke (på PGSQL måden) i et par versioner endnu.

Svenne
--
Mail use...@krap.dk - sve...@krap.dk - PGP key id : 0xDF484022
ICQ: 5434480 - http://www.krap.dk - http://www.krap.net
PGP Key http://keys.pgp.dk:11371/pks/lookup?op=get&search=0xDF484022

0 new messages