André Laugks: PHP und CURSOR mit PostreSQL

Beitrag lesen

Hallo!

Würde trotzdem gerne mit den Cursorn rumspielen, rein interessehalber. Wo liegt denn mein Fehler?

Sollst Du auch, ich möchte Dich gar nicht dran hindern.

Wo liegt denn mein Fehler?

  
// getestet!!!  
  
$conn = pg_connect("host=servername dbname=datenbankname user=username password=passwort");  
  
// Hier habe ich Dein SQL-Statement rein kopiert.  
// Sollte es nun immer noch nicht funktionieren,  
// liegt es an Deinem SQL-Statement.  
$dbQuery = "SELECT * FROM log_entries WHERE request_time BETWEEN " . $t1 . " AND " . $t2 . " ORDER BY request_time DESC LIMIT 3;";  
  
$r = pg_query($conn, 'BEGIN;');  
$r = pg_query($conn, 'DECLARE getRecords CURSOR FOR '. $dbQuery);  
  
for ($i=1; $i < 10; $i++) {  
  echo (10*$i);  
  $r  = pg_query($conn, "FETCH " . (10*$i) . " FROM getRecords;");  
  $row = pg_fetch_all($r);  
  print_r($row);  
}  
$r = pg_query('CLOSE getRecords;');  
$r = pg_query('COMMIT;');  

for ($i=0; $i< $nOfRecords; $i++) {
  $r   = pg_query($conn, "FETCH getRecords;");

Hier steht natürlich noch:
$row = pg_fetch_array($r);

Ist mir gar nicht aufgefallen das es fehlt.

Das LIMIT 3 ist übrigens auch nur zu Testzwecken!

Kannst Du bei CURSOR auch verwenden.

Hier noch mal als Beispiel:

-> Ich arbeite hauptsächlich mit ADOdb (Doku)
-> bei mir läuft noch PostgreSQL 7

  
$db->BeginTrans();  
  
$sql = "DECLARE test CURSOR FOR SELECT id, titel FROM archiv ORDER BY arc_id LIMIT 500";  
$db->Execute($sql);  
  
$rs = $db->Execute('FETCH 10 FROM test');  
$row = $rs->GetArray();  
print_r($row);  
  
$rs = $db->Execute('FETCH 20 FROM test');  
$row = $rs->GetArray();  
print_r($row);  
  
$rs = $db->Execute('MOVE 300 IN test');  
  
$rs = $db->Execute('FETCH 20 FROM test');  
$row = $rs->GetArray();  
print_r($row);  
  
$db->Execute('CLOSE test');  
  
$db->CommitTrans();  

André Laugks

--
Die Frau geht, die Hilti bleibt!