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
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!
><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
>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
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
>> 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
?
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?
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 ;)
> 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 <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).
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.
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
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