• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] MySQL - Fehler bei Abfrage

Hallo-Welt

Aktives Mitglied
Hallo liebe Community, und ich habe schon wieder ein Problem, wo ich nicht weiterkomme.

Nämlich will ich einen einziger Wert aus der DB abfragen, und nicht ganze Tablen oder Spalten oder Reihen, wie in zahlreichen Tutorials und Anführungen gezeigt. Mein Problem ist, dass ich es nicht schaffe, das ganze zum laufen zu bringen. Hier mal mein Code zum Auslesen:
PHP:
<?php
$mysqlconnect = mysqli_connect("mysql.meinedomain.de", "Datenbankname", "Passwort")
or die("Fehler");

$abfrage = "SELECT Spalte1 FROM Tabellenname WHERE Spalte2 = 'Example' LIMIT 1";
$ergebnis = mysqli_query($mysqlconnect,$abfrage);
echo $ergebnis;

mysqli_close($mysqlconnect);
?>
Das funktioniert aber sowas von gar nicht, Fehlermeldung lautet
[ERROR]Catchable fatal error: Object of class mysqli_result could not be converted to string in /home/example/public_html/test.php on line 7[/ERROR].
Ich bin mir sicher, es ist bestimmt ein ganz mieser Anfängerfehler. Dennoch wäre ich euch dankbar, wenn ihr mir bei meinem Problem helfen würdet.

PS: Warum gibt es im gesammten WWW nur Anleitungen um mehrere, aber nicht um nur eine einzige Zelle der Tabelle auszulesen?
 
Werbung:
Schon mal in der Doku nachgesehen, was mysqli_query liefert? Du bekommst da nämlich nicht das, was du glaubst.

Und wo ist der Unterschied, ob ich eine Zeile oder mehrere Zeilen aus der DB haben will? Naja, ich denke, wenn du das mit mysqli_query verstanden hast, wirst du dir das selber beantworten können.

Siehe http://de2.php.net/manual/de/mysqli.query.php und beachte die Beispiele und die User Contributed Notes
 
Schon mal in der Doku nachgesehen, was mysqli_query liefert? Du bekommst da nämlich nicht das, was du glaubst.

Und wo ist der Unterschied, ob ich eine Zeile oder mehrere Zeilen aus der DB haben will? Naja, ich denke, wenn du das mit mysqli_query verstanden hast, wirst du dir das selber beantworten können.

Siehe http://de2.php.net/manual/de/mysqli.query.php und beachte die Beispiele und die User Contributed Notes
Okay, erst mal danke für den Link. Ihm entnehmen kann ich aber wiederum nur eine Bestätigung der Zeile "$ergebnis = mysqli_query($mysqlconnect,$abfrage);", siehe auch http://www.w3schools.com/php/func_mysqli_query.asp
Von daher verstehe ich WIRKLICH nicht, was daran falsch sein sollte. Einmal die Verbindung definiert, und einmal die Select-Abfrage. Ist das denn nicht so?
 
Werbung:
Doch doch, ist soweit richtig, nur $ergebnis mit echo auszugeben ist Blödsinn. Wenn überhaupt, dann var_dump nehmen.
 
Doch doch, ist soweit richtig, nur $ergebnis mit echo auszugeben ist Blödsinn. Wenn überhaupt, dann var_dump nehmen.
Vielen Dank für den Tipp. Der Fehler wird jetzt nicht mehr angezeigt, nur entspricht die Ausgabe nicht ganz meinen Erwartungen. Hier die Ausgabe:
Code:
object(mysqli_result)#2 (5) {
  ["current_field"]=>
  int(0)
  ["field_count"]=>
  int(1)
  ["lengths"]=>
  NULL
  ["num_rows"]=>
  int(1)
  ["type"]=>
  int(0)
}
Eigentlich sollte aber der Inhalt, also der Wert der Zelle ausgelesen werden. In der Doku ist diese Ausgabe auch beschrieben, var_dump kann also nicht der gesuchte Befehl sein, oder bin ich nur zu dumm es umzusetzen? Das einzige was mich als Ausgabe interessiert ist der Inhalt einer einzigen Zelle, ganz ohne Schnick-Schnack, geht sowas?
 
Vielen Dank für den Tipp. Der Fehler wird jetzt nicht mehr angezeigt, nur entspricht die Ausgabe nicht ganz meinen Erwartungen. Hier die Ausgabe:
Code:
object(mysqli_result)#2 (5) {
  ["current_field"]=>
  int(0)
  ["field_count"]=>
  int(1)
  ["lengths"]=>
  NULL
  ["num_rows"]=>
  int(1)
  ["type"]=>
  int(0)
}
Eigentlich sollte aber der Inhalt, also der Wert der Zelle ausgelesen werden. In der Doku ist diese Ausgabe auch beschrieben, var_dump kann also nicht der gesuchte Befehl sein, oder bin ich nur zu dumm es umzusetzen? Das einzige was mich als Ausgabe interessiert ist der Inhalt einer einzigen Zelle, ganz ohne Schnick-Schnack, geht sowas?
Das geht so nicht. mysqli_query gibt eine mysqli_result Instanz zurück, keinen String. Egal ob du eine Spalte oder mehrere abfragst.
Ohne "schnick-schnack" geht es einfach nicht.
 
Werbung:
Das geht so nicht. mysqli_query gibt eine mysqli_result Instanz zurück, keinen String. Egal ob du eine Spalte oder mehrere abfragst.
Ohne "schnick-schnack" geht es einfach nicht.
Okay, und mit "schnick-schnack" würde heißen, dass das ganze mit einer Schleife ausgegeben werden müsste ???!?
Ich wäre dir über einen Link oder irgend eine Stütze die mir behilflich sein kann echt dankbar, denn ich bin absoluter Anfänger mit MySQL und habe bisher eig. noch nie mit gearbeitet.
 
Okay, soweit, so gut. Ich habe jetzt herausgefunden (ich hoffe zumindest, dass ich es jetzt herausgefunden habe, sonst stehe ich ganz schön auf der Leitung), dass das ganze mit der Funktion mysqli_fetch_assoc gemacht werden kann. Nur bekomme ich jetzt weder Fehlermeldung, noch irgendeine Ausgabe. Und mit einem Echo ausgegeben bekomme ich als autput, ich zitiere "Array", das ist alles. Das steht jedoch gar icht in der Zelle, da steht etwas ganz anderes. Das selbe Ergebnis mit einem print. Was zum Teufel mache ich falsch, ich bin jetzt echt am verzweifeln. Ich durchsuche das Web nun schon seit Stunden nach einer Antwort und habe schon alles mögliche versucht, aber nichts, einfach rein gar nichts klappt so, wie es sollte. Es darf doch nicht so schwer sein, eine einfache, lächerliche Zelle auszulesen, oder? Kann mir irgendwer weiterhelfen, oder den entscheidenden Tipp geben, ich komm einfach nicht drauf und finde mit Google auch nur Müll...
 
Werbung:
Also so langsam wird es aber blöde!
Siehe http://de1.php.net/manual/de/mysqli-result.fetch-assoc.php und achte auch dort auf die Beispiele und die User Contributed Notes
Okay, jetzt hab ich es raus! :)

Sorry, dass es so lange gedauert habe, aber bin halt mit MySQL noch total unerfahren. Dennoch würde ich gerne deine Meinung (oder die eines anderen Users) zum ganzen hören. Der Abschnitt lautet jetzt:
PHP:
while ($row = mysqli_fetch_assoc($ergebnis)) {
  printf ("%s", $row["Spalte1"], $row["Spalte2"]);
  }
Ist das so korrekt, oder anders gesagt, ist das normal, dass das ganze in einer while-Schleife ausgedrückt wird? Mir erscheint das extrem seltsam... Funktionieren tut es, aber trotzdem, ist es so logisch korrekt?
 
Wenn du nur einen Datensatz selektiert hast, brauchst du die Schleife nicht, bei mehr als einem Datensatz brauchst du die Schleife wieder.

Allerdings wird bei dir nur Spalte 1 ausgegeben, da beim printf nur ein %s stehen hast
 
Werbung:
Allerdings wird bei dir nur Spalte 1 ausgegeben, da beim printf nur ein %s stehen hast
Ja, das sollte an sich auch so sein. Die "Spalte2" steht zu viel da; Kopierfehler.
Wenn du nur einen Datensatz selektiert hast, brauchst du die Schleife nicht, bei mehr als einem Datensatz brauchst du die Schleife wieder.
Okay, danke für den Tipp. Schleife ist jetzt weg und Funktion funktioniert immer noch bestens. DIE Ressourcen sind gespart...
 
Mal ein bisschen OT, da die Frage ja eigentlich beantwortet ist.

Warum Ressourcen?

Versteh mich nicht falsch, die Schleife wegzupacken ist sicher eine gute Idee, aber immerzu lese ich von Ressourcen und Geschwindigkeit, v.a. bei "Anfängerfragen". Wie oft kommt es auf ms an? Selten und dann auch meist nur im professionellen Bereich.

Ich finde es da viel wichtiger seinen Code auf Erweiterbarkeit und Lesbarkeit zu optimieren. Da kann so ziemlich jeder, von Anfänger bis Profi viel mehr optimieren als bei Ressourcen.
 
  • Like
Reaktionen: pax
Versteh mich nicht falsch, die Schleife wegzupacken ist sicher eine gute Idee, aber immerzu lese ich von Ressourcen und Geschwindigkeit, v.a. bei "Anfängerfragen". Wie oft kommt es auf ms an? Selten und dann auch meist nur im professionellen Bereich.
Naja, warum sollte man Code drin stehen lassen, welcher nicht gebraucht wird. Ich will meinen Provider ja nicht unnötig belasten, selbst wenn es nicht viel ausmacht und denen vermutlich Schnuppe ist. Nützen tut die Schleife ja doch nichts (in diesem Fall).
Ich finde es da viel wichtiger seinen Code auf Erweiterbarkeit und Lesbarkeit zu optimieren. Da kann so ziemlich jeder, von Anfänger bis Profi viel mehr optimieren als bei Ressourcen.
Es wäre auch nachträglich keine grosse Sache, einfach die Schleife wieder rein zu packe; da müssten sowieso noch ganz andere Modifikationen vorgenommen werden. Und sich Schnittstellen freizuhalten ist auch leichter gesagt als getan. Woher soll man wissen, wie die Seite sich im Laufe der Zeit entwickeln wird?
 
Werbung:
Zurück
Oben