CodeForum.chc-worker.ch Foren (Partner Site)Text Db APIThema: PHP Error: [8] Object of class ResultSet could not be converted to int [Line:970
Seiten: [1]
AntwortenDrucken
Autor Thema: PHP Error: [8] Object of class ResultSet could not be converted to int [Line:970  (Gelesen 474 mal)
dr_snuggles
Neu hier
*
Offline Offline

Beiträge: 4


« am: 08. Januar 2010, 17:28:51 »
ZitierenZitat

Hallo,

ich möchte eine Abfrage aus zwei Tabellen in einer Datenbank machen doch leider kommt immer wieder der obige Fehler.

Hier einmal ein Codeschnipsel:

Code:

   $db = new Database(txt_DB);  // eine Instanz der Datenbank erstellen
    $result = $db->executeQuery("SELECT * FROM content, menu");
    while ($result->next()) {
        $record = $result->getCurrentValuesAsHash();
        echo "<tr>\n";
        echo "<td><a href='#'>$record[name]</a></td>\n";
        echo "<td>$record[menu_name]</td>\n";                   // hier soll eigentlich der Name des Menüpunktes erscheinen
        echo "<td>$record[content_active]</td>\n";
        echo "<td>$record[content_id]</td>\n";
        echo "<td>$record[valid_from]</td>\n";
        echo "<td>$record[valid_to]</td>\n";
        echo "<td><a href='#'><img src='' title='edit' alt='edit'></a></td>\n";
        echo "<td><a href='#'><img src='' title='del' alt='del'></a></td>\n";
        echo "</tr>\n";
     }

und hier die einzelnen Tabellen:
[content]
Code:
c_id#content#parent_id#content_active#content_id#valid_from#valid_to#name
inc#str#int#str#int#int#int#str
###true####
1#Content1#0#true#0#1262304000#1275091200#startseite
2#Content2#0#true#1#1262304000#1275091200#startseite
3#Content3#1#true#0#1262304000#1275091200#weitereseite

und
[menu]
Code:
id#menu_name#menu_id#active
inc#str#inc#str
###true
1#Startseite#0#true
2#Speisekarte#1#true
3#Reservierungen#2#true
4#Kontakt#3#true
5#Impressum#4#true

Ich steh ziemlich aufm Schlauch und seh evtl. den Wald vor lauter Bäumen nicht.
Würde mich sehr freuen wenn mir jemand auf die Sprünge helfe könnte.

Gruß
dr_snuggles
« Letzte Änderung: 08. Januar 2010, 17:53:49 von dr_snuggles » Moderator informieren   Gespeichert
SuperMario
Globaler Moderator
*
Offline Offline

Beiträge: 2493



« Antworten #1 am: 11. Januar 2010, 17:04:24 »
ZitierenZitat

Du bist dir aber schon im klaren, daß du hier ein Kreuzprodukt erstellt. Du solltest deine beiden Tabellen schon irgendwie miteinander verknüpfen/verjoinen, d.h. eine WHERE Bedingung hinzufügen. Wenn deine beide Tabellen nichts miteinander zu tun haben, dann solltest du sie am besten beide getrennt abrufen.

Code:
echo "<td><a href='#'>$record[name]</a></td>\n";
Das klappt so nicht.

Probier es mal so:
Code:
echo "<td><a href='#'>" . $record['name'] . "</a></td>\n";
D.h. die Array-Angabe aus dem String raus und mit "." Punkt zusammensetzen und bei Angabe des Array-Keys mußt du glaube ich Hochkommas drumrum schreiben.
« Letzte Änderung: 12. Januar 2010, 13:21:04 von SuperMario » Moderator informieren   Gespeichert
dr_snuggles
Neu hier
*
Offline Offline

Beiträge: 4


« Antworten #2 am: 13. Januar 2010, 14:00:36 »
ZitierenZitat

Ok, das mit der WHERE Bedingung ist korrekt und hab ich auch schon mit eingebaut, klappt aber dennoch nicht.
Die Fehlermeldung wird auf jeden Fall ausgegeben sobald ich versuche eine Abfrage über mehr als eine Tabelle zu machen.

Zitat
Code:
echo "<td><a href='#'>$record[name]</a></td>\n";

Das klappt so nicht.

Probier es mal so:
Code:
echo "<td><a href='#'>" . $record['name'] . "</a></td>\n";

D.h. die Array-Angabe aus dem String raus und mit "." Punkt zusammensetzen und bei Angabe des Array-Keys mußt du glaube ich Hochkommas drumrum schreiben.

<Klugscheissermodus an>  Grinsend
Funktioniert sehr wohl, da ich die Echo Anweisung in doppelte Anführungszeichen schreibe werden alle Variablen/Arrays innerhalb dieser Anführungszeichen aufgelöst.
Die Hochkommas sind auch nicht wirklich notwendig.
</ Klugscheissermodus aus>  Grinsend


Dennoch vielen Dank für Deine Antwort auch wenn sie nicht wirklich bei meinem Problem hilft.

Ich habe die beiden Tabellen getrennt abgefragt was jetzt auch nach einigem hin und her ganz gut funktioniert.

Ich muss sagen ich bin absolut Begeistert von der txt-db-api. So etwas hab ich schon lange gesucht.

Gruß
dr_snuggles


Moderator informieren   Gespeichert
Gobo
nicht zu stoppen
*
Offline Offline

Beiträge: 1215



« Antworten #3 am: 13. Januar 2010, 15:52:32 »
ZitierenZitat

Ja, es funktioniert, aber wenn wir schon klugscheissen, dann auch richtig. Durch das Weglassen der Stringbegrenzer im Array versucht PHP erst, name als Konstante aufzulösen und deren Wert für den Zugriff als Index für den Array zu nehmen. Wenn Du alle Warnungen einschaltest, bekommst Du auch eine entsprechende Meldung.

Daher stammt wahrscheinlich auch die ursprüngliche Fehlermeldung. Du versuchst bestimmt, auf ein assoziatives Array zuzugreifen, lässt aber bei einem String-Index die Anführungszeichen weg und PHP löst den Bezeichner als Integer auf, der im assoziativen Array nun mal nicht gefunden wird.
Moderator informieren   Gespeichert

Wenn die Klugen immer nachgeben, geschieht nur das, was die Dummen wollen.
dr_snuggles
Neu hier
*
Offline Offline

Beiträge: 4


« Antworten #4 am: 13. Januar 2010, 16:50:44 »
ZitierenZitat

Ok, kritik wohlwollend angenommen, ändert aber nix an der Fehlermeldung.
Das Problem bleibt weiterhin bestehen.

Gruß
dr_snuggles
Moderator informieren   Gespeichert
SuperMario
Globaler Moderator
*
Offline Offline

Beiträge: 2493



« Antworten #5 am: 15. Januar 2010, 02:47:20 »
ZitierenZitat

Ich glaube hier ist der Fehler in der txt-db-api:
Code:
for(;$i<count($resultSets);++$i) {
  if($resultSets[$i] != 0) {
    $rsMaster=$rsMaster->joinWithResultSet($resultSets[$i]);
  }
}
In database.php in Zeile 970 wird auf " != 0" abgeprüft und das scheint dem PHP nicht zu gefallen.

Vielleicht kannst du mal statt:
Code:
if($resultSets[$i] != 0) {
dasd hier probieren:
Code:
if(isset($resultSets[$i])) {
Moderator informieren   Gespeichert
dr_snuggles
Neu hier
*
Offline Offline

Beiträge: 4


« Antworten #6 am: 21. Januar 2010, 14:00:59 »
ZitierenZitat

Ich glaube hier ist der Fehler in der txt-db-api:
Code:
for(;$i<count($resultSets);++$i) {
  if($resultSets[$i] != 0) {
    $rsMaster=$rsMaster->joinWithResultSet($resultSets[$i]);
  }
}
In database.php in Zeile 970 wird auf " != 0" abgeprüft und das scheint dem PHP nicht zu gefallen.

Vielleicht kannst du mal statt:
Code:
if($resultSets[$i] != 0) {
dasd hier probieren:
Code:
if(isset($resultSets[$i])) {

Super, das funktioniert.
Ich geb Dir ein virtuelles Bier aus dafür.

Gruß
dr_snuggles
Moderator informieren   Gespeichert
Seiten: [1]
AntwortenDrucken
CodeForum.chc-worker.ch Foren (Partner Site)Text Db APIThema: PHP Error: [8] Object of class ResultSet could not be converted to int [Line:970
Gehe zu:  

 

News

23. Februar 2010, 21:10:28
Ausfälle in der letzten Zeit

Partner Sites

Werbung

TinyPortal v1.0.5 beta 1© Bloc