Fatal error: Uncaught Error: Object of class mysqli_result could not be converted to string?

2 Antworten

https://www.peterkropff.de/site/php/mysqli_methoden_result.htm

Hier ne abhandlung zur benutzung von mysqli.

Du kriegst an der stelle noch keine daten. Sondern ein Objekt mit welchem man die daten dann holen kann.


Pilot4949 
Beitragsersteller
 24.04.2020, 16:49

Achso, und was kommt dann in "while" hinein? Und wie krieg ich das Ergebnis in die Variable $sh_title rein?

0
FouLou  24.04.2020, 16:51
@Pilot4949

Das Ergebniss haste in $row. Schau halt was die Fetchassoc zurückliefert und wie du das gebrauchen kannst.

eventuell musste noch $row->column(0) oder soetwas machen um an den wert zu kommen.

0
Pilot4949 
Beitragsersteller
 24.04.2020, 16:53
@FouLou

Jetzt krieg ich aber den Fehler "Fatal error: Uncaught Error: Call to a member function fetch_assoc() on bool"

0

Ich gehe zunächst einfach einmal auf alles ein, was mir so auffällt.

HTML

1) Als Sprache hast du für dein Dokument en, also Englisch angegeben. Ich sehe aber nur deutsche Texte?

2) In einem ul-Element dürfen nur li-Elemente als direkte Kinder aufgeführt werden. Dein form-Tag gehört da nicht hin. Entweder du entfernst/änderst den ul-Tag oder du verschiebst das Formular woandershin (z.B. in ein li-Element innerhalb des ul).

3) Bei deinen button-Elementen im Formular fehlt jeweils das c für das class-Attribut. Da sie übrigens standardmäßig schon submit-Buttons sind, kannst du das type-Attribut jeweils weglassen.

4) Einheitsangaben sind in den Attributen width und height nicht erlaubt. Setze die Werte stattdessen mit CSS.

5) Das align-Attribut (auf dem video-Tag) gibt es nicht mehr. Setze die Position des Videos stattdessen via CSS (bspw. mit Hilfe des text-align-Properties).

6) Auf dem iframe-Tag sind ein paar Attribute, die längst als obsolete gekennzeichnet wurden (allowtransparency, frameborder, scrolling). Zumindest die beiden letzten kannst du mit CSS leicht ersetzen (siehe border und overflow).

PHP

1) Wenn $sh_id eh immer einen festen Wert besitzt, brauchst du den SQL-Query nicht zusammenzubauen. Zumal es performanter wäre, beide Werte in einem Schwung aus der Datenbank zu holen.

"SELECT `title`, `text` FROM `texts` WHERE `id`='1'"

Wenn du nun $sh_id dahingehend ändern solltest, sodass dessen Wert von außen (bspw. via GET/POST) hereingetragen wird, solltest du ein Prepared Statement verwenden.

2) Schau zu den Fehlern jeweils in die Dokumentation der Funktionen.

Fatal error: Uncaught Error: Object of class mysqli_result could not be converted to string?

mysqli_query

Die Rückgabe ist bei Erfolg ein mysqli_result-Objekt. Aus diesem müssen die Werte erst ausgelesen werden. Verwende die fetch-Funktion.

Fatal error: Uncaught Error: Call to a member function fetch_assoc() on bool

Wenn die Anfrage an die Datenbank aus irgendeinem Grund scheitert, gibt dir mysqli_query einen boolschen Typ (false) zurück. Diese besitzt allerdings keine Methoden, wie fetch.

Du solltest demzufolge erst prüfen, ob die Datenbankabfrage erfolgreich war oder nicht.

$connection = new mysqli(/* ... */);
$statement = $connection->prepare("SELECT title, text FROM texts WHERE id=?");
$statement->bind_param("s", $sh_id);

if ($statement->execute()) {
  // fetch ...
}
else {
  // error ...
}

Warum deine Abfrage gescheitert ist, kann ich dir allerdings (noch nicht) sagen. Prüfe den String auf seine Syntax. Wenn du Zugriff auf die Datenbank hast (z.B. via phpMyAdmin), kannst du deine konkreten Queries auch einmal darüber an die Datenbank verschicken. Möglicherweise findest du damit Fehler schneller.