Seite 1 von 1

Parse Error / ADODB

Verfasst: Mo 17. Feb 2003, 23:13
von mr_qmen
Hallo miteinander

Ich bin neu auf contenido-geschmack gekommen und möchte nun bestehende scripts als Module einfügen. Habe allerdings bis jetzt wenig erfolg :( . Ich hab da was mit der Variable $DB mitbekommen, aber die Umkehrung hat nichts gebracht. Hat vielleicht jemand von euch eine Idee?

(Der connect auf die DB erfolgt via ADODB 2.5)

Script:

<?php

$DB2 = $DB;

include("../../adodb240/adodb.inc.php");
include("../../dbconn/ascconn.php");


$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$result = $DB2->Execute("select * from tbl_news_news t1 left join tbl_news_user t2 on t1.userid=t2.id left join tbl_news_cat t3 on t1.cat=t3.id");
if ($result === false) die("failed");
else
print '<table width="79%" border="0">';

while (!$result->EOF) {
$fld = $result->FetchField(16);
$type = $result->MetaType($fld->type);
print '<tr><td class="#font11">'.$result->fields[20].
'</td><td width="23%" class="#font11">'.$result->fields[3].
'</td><td width="32%" class="#font11">'.$result->fields[4].
'</td><td width="15%" class="#font11">'.$result->UserDate($result->fields[16],'d.m.Y').
'</td><td width="9%" class="#font11">'.'<A HREF="../detail_manuell.php?'."id_text=".$result->fields[0].
'">Detail</A>'.'<BR>';
$result->MoveNext();
}
print '</table>';

$DB = $DB2;

// $result->Close();
?>

Verfasst: Di 18. Feb 2003, 09:51
von braendle
Hallo,

Contenido verwendet nicht die ADODB sondern die phplib für die Datenbank-Zugriffe.
Dein Code in diese Version zu überführen würde etwa so aussehen (nicht getestet):

Code: Alles auswählen

<?php 
$db->query("select * from tbl_news_news t1 left join tbl_news_user t2 on t1.userid=t2.id left join tbl_news_cat t3 on t1.cat=t3.id"); 

if (!$db->next_record()) die("failed"); 
else 

 echo '<table width="79%" border="0">'; 

 do { 
    echo '<tr><td class="#font11">'.$db->f(20). 
         '</td><td width="23%" class="#font11">' . $db->f(3) . 
         '</td><td width="32%" class="#font11">' . $db->f(4) . 
         '</td><td width="15%" class="#font11">' . date('d.m.Y', $db->f(16)) . 
         '</td><td width="9%" class="#font11"><A HREF="../detail_manuell.php?id_text=' . $db->f(0) . '">Detail</A><BR>'; 
 } while ($db->next_record());

 echo '</table>'; 

} 
?>

Dabei sollest Du in den Angaben $db->f(x) das x durch den gewünschten Feldnamen ersetzen, ob die Sache mit Indizes funktioniert entzieht sich meiner Kenntnis ...

Bei der Datumsausgabe date('d.m.Y', $db->f(16)) kann es sein, das Du den Datenbankwert zuerst noch mit strtodate() in einen Timestamp umwandeln mußt.

Die do...while-Schleife könnte auch andersrum gesetzt sein, dann darf aber vorher kein $db->next_record() verwendet werden ... würde einen Datensatz überspringen ...

Ansonsten hilft Dir an ehesten die Doku zur phplib weiter. :)

Verfasst: Di 18. Feb 2003, 23:22
von mr_qmen
braendle hat geschrieben:Hallo,

Contenido verwendet nicht die ADODB sondern die phplib für die Datenbank-Zugriffe.
Dein Code in diese Version zu überführen würde etwa so aussehen (nicht getestet):

Code: Alles auswählen

<?php 
$db->query("select * from tbl_news_news t1 left join tbl_news_user t2 on t1.userid=t2.id left join tbl_news_cat t3 on t1.cat=t3.id"); 

if (!$db->next_record()) die("failed"); 
else 

 echo '<table width="79%" border="0">'; 

 do { 
    echo '<tr><td class="#font11">'.$db->f(20). 
         '</td><td width="23%" class="#font11">' . $db->f(3) . 
         '</td><td width="32%" class="#font11">' . $db->f(4) . 
         '</td><td width="15%" class="#font11">' . date('d.m.Y', $db->f(16)) . 
         '</td><td width="9%" class="#font11"><A HREF="../detail_manuell.php?id_text=' . $db->f(0) . '">Detail</A><BR>'; 
 } while ($db->next_record());

 echo '</table>'; 

} 
?>

Dabei sollest Du in den Angaben $db->f(x) das x durch den gewünschten Feldnamen ersetzen, ob die Sache mit Indizes funktioniert entzieht sich meiner Kenntnis ...

Bei der Datumsausgabe date('d.m.Y', $db->f(16)) kann es sein, das Du den Datenbankwert zuerst noch mit strtodate() in einen Timestamp umwandeln mußt.

Die do...while-Schleife könnte auch andersrum gesetzt sein, dann darf aber vorher kein $db->next_record() verwendet werden ... würde einen Datensatz überspringen ...

Ansonsten hilft Dir an ehesten die Doku zur phplib weiter. :)
Hallo jürgen

Die Sache hat wohl so einigermassen geklappt und ich habe mich in die doku eingelesen. Mein Problem ist aber, dass ich auf den verschiedenen Tables die ich im Query abfrage dieselben feldnamen habe. Bei ADODB konnte ich die Feldnamen mit Nummern ansprechen. Hast Du dazu noch eine Idee?

Vielen Dank

Gruss Marc Müller

Verfasst: Mi 19. Feb 2003, 01:40
von braendle
Aber klar doch ... und die gilt nicht nur für mySQL :-)

Du kannst in einer SQL-Query auch Aliase verwenden, z.B.

Code: Alles auswählen

select A.idupl AS aid, B.idupl AS bid from tblLink AS A, tblRecht AS B WHERE A.id=B.id
Jetzt kannst Du auf A.idupl durch $db->f("aid") und auf B.idupl durch $db->f("bid") zugreifen.
Keine Nummern mehr, wenn sich Deine SQL-Query verändert mußt Du ggf. die Feldnummern ändern. Durch die Aliase kannst Du frei arbeiten, Du mußt nur eindeutige Aliase verwenden.