Hallo!
Ich habe noch nie mit PHP gearbeitet, habe allerdings die selbe Ausgangslage wie du (lokal PostGreSQL, im Einsatz MySQL).
Bei mir ist es umgekehrt, der Server auf dem das mal laufen soll wird PostgreSQL verwenden, aber bis ich das da installieren kann habe ich auf dem dafür vorgesehenen Server nur MySQL zur Verfügung, außerdem soll die Software auch MySQL "beherrschen" falls es auch mal mit MySQL laufen soll, was ich nicht hoffe, vor allem wegen Transaktionssicherheit.
Ich lasse mir (in Perl) von meinem Datenbank-handle keinen Hash (assoziativen Array) zurückliegern, sondern eine Liste.
Was ist der Unterschied zw. einem Hash und einer "liste"? Ich verwende auch keinen Array wie hier beschreiben, sondern ich lasse mir ein Objekt zurückgeben, im Prinzip nur weiß ich die Syntax lieber mag. Naja, dank PEAR geht das alles in PHP ganz praktisch, vor allem zusammen mit meiner Template-Engine, mal ein Code-Beispiel:
name.php:
---------
$sql = "
SELECT
*
FROM
".DB_PREFIX."events as events
LEFT JOIN
".DB_PREFIX."event_types as types
ON events.event_typ = types.event_typ_id
WHERE
events.group_id = '".$user->getVar('group_id')."'
";
$tpl->assign('data', $db->getAll($sql));
$tpl->display('name.tpl');
name.tpl:
---------
<html>
<table>
{foreach from=$data item="row"}
<tr>
<td>{$row->event_id}</td>
<td>{$row->name}</td>
<td>{$row->typ}</td>
</tr>
{foreach}
</table>
</html>
das ist wirklich praktisch!
Wenn du die Spaltennamen nicht _noch einmal_ explizit benötigst (da du sie durch dein Select sowieso schon kennst, und dadurch die Reihenfolge auch bekannt ist), könntest du dieses Problem so vermeiden.
Durch Trennung von PHP-Script und Templates wird das ganze doch wieder etwas schwieriger, im Template ist es schon sehr angenehm wenn ich mit {$row->name} zugreifen kann, als irgendwelche Zahlen oder sowas. Daher ist es auch gut so wie es ist, nur wollte ich mal abklären wie PostgreSQL damit umgehen.
Ich habe bei mir keine großen Fallen entdeckt, nur ein paar Inkonsistenzen was LIMIT und OFFSET angeht (die in der Kurzform (nur diese kennt Pg) jeweils anders herum verwendet werden).
Danke für den Tipp. MUss ich mal gucken, aber das wäre ein bedeutendes Problem, ich hoffe dass PEAR das aus der Welt räumt, aber das bezweifele ich irgendwie. Wäre aber doof wenn ich jedesmal bei der Verwendung von LIMIT vorher in den Scripten den DB-Typ testen müsste... eigenlich sollte PEAR::DB(DB-Abstraktions-Layer, Teil von PEAR einer PHP-Klassenbibliothek) sich um sowas kümmern.
Eine Frage nur so nebenbei: stimmt es, daß MySQL kein Boolean kennt? Danach habe ich nämlich fast verzweifelt gesucht, und bin jetzt auf integer (0, 1) umgestiegen, was allerdings nicht so optimal ist.
Soweit ich weiß kann MySQL das nicht, das nervt mich auch. Zumal ich dann das Ergebnis der DB-Abfrage teilweise noch "überarbeiten" muss. Ich verwende hierfür in MySQL den Datentyp SET und stelle nur '0' und '1' zur Auswahl, keine Ahnung ob TINYINT vielleicht besser/schneller wäre, vielleicht kennt ja jemand anders hier eine gute Möglichkeit?
Viele Grüße
Andreas