/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
PostgreSQL-funktionern
Fra : Jonas Koch Bentzen


Dato : 09-11-01 20:45

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 (09-11-2001)
Kommentar
Fra : Lars Petersen


Dato : 09-11-01 21:52

<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.~ (09-11-2001)
Kommentar
Fra : Thomas Jensen - pil.~


Dato : 09-11-01 22:33

On Fri, 9 Nov 2001 21:51:47 +0100, "Lars Petersen"
<lars@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

Jonas Koch Bentzen (09-11-2001)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 09-11-01 23:52

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?

--
Jonas Koch Bentzen

http://understroem.dk/

Christian Joergensen (10-11-2001)
Kommentar
Fra : Christian Joergensen


Dato : 10-11-01 14:25

Jonas Koch Bentzen <ingen.emailadresse@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 (10-11-2001)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 10-11-01 15:44

Christian Joergensen skrev:

> Jonas Koch Bentzen <ingen.emailadresse@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

http://understroem.dk/

Jonas Koch Bentzen (10-11-2001)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 10-11-01 15:48

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.

--
Jonas Koch Bentzen

http://understroem.dk/

Mads Lie Jensen (09-11-2001)
Kommentar
Fra : Mads Lie Jensen


Dato : 09-11-01 22:36

On Fri, 09 Nov 2001 20:45:21 +0100, Jonas Koch Bentzen
<ingen.emailadresse@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 - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk

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

Lars Petersen (09-11-2001)
Kommentar
Fra : Lars Petersen


Dato : 09-11-01 22:51

> 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

--
-
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!



Mads Lie Jensen (09-11-2001)
Kommentar
Fra : Mads Lie Jensen


Dato : 09-11-01 23:36

On Fri, 9 Nov 2001 22:51:02 +0100, "Lars Petersen"
<lars@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

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

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

Lars Petersen (10-11-2001)
Kommentar
Fra : Lars Petersen


Dato : 10-11-01 00:26

> > 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 ;)


--
-
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!



Niels Andersen (12-11-2001)
Kommentar
Fra : Niels Andersen


Dato : 12-11-01 16:08

"Lars Petersen" <lars@TRUTHioflux.net> wrote in message
news:adYG7.1718$Gt.88523@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 (12-11-2001)
Kommentar
Fra : Svenne Krap


Dato : 12-11-01 18:17

On Mon, 12 Nov 2001 16:07:30 +0100, "Niels Andersen"
<niels-usenet@myplace.dk> wrote:

>"Lars Petersen" <lars@TRUTHioflux.net> wrote in message
>news:adYG7.1718$Gt.88523@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?

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 usenet@krap.dk - svenne@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

Søg
Reklame
Statistik
Spørgsmål : 177522
Tips : 31968
Nyheder : 719565
Indlæg : 6408670
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste