MySQL Ausgabe in PHP funktioniert nicht (Ausgabe = leer)?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Setze die Ausgabe hinter echo in Anführungszeichen.

echo $row[wasauchimmer];

Alternativ kannst du die Ausgabe auch zuvor in einer Variable definieren.

$output = $row[wasauchimmer];

echo $output;

(Am Anfang und Ende habe ich das obligatorische <?php ?> gesetzt, nur wird das hier anscheinend dank <> nicht richtig interpretiert. Einfach ignorieren)

Sollte hier im Editor eigentlich richtig interpretiert werden.


mattmattmattmat 
Fragesteller
 12.02.2017, 19:48

Funktioniert leider beides nicht. Weder 

$bla =  "SELECT wasauchimmer FROM Accounts where User = 'Testuser'";

foreach ($link->query($bla) as $row) {
echo "$row[wasauchimmer]"; }


noch 


$bla = "SELECT wasauchimmer FROM Accounts where User = 'Testuser'";

foreach ($link->query($bla) as $row) { 
$output = $row[wasauchimmer]; echo $output;}

Auch letzteres mit Anführungszeichen geht nicht. Jedesmal ist die Ausgabe leer. Wenn ich die Query jedoch bei phpMyAdmin teste, bekomme ich mein entsprechendes Ergebnis - daran wird es nicht liegen.

0
Niklas  12.02.2017, 19:52
@mattmattmattmat

Hm... 

Naja, ich empfehle dir sowieso, die Verbindung etwas umzubauen, undzwar wie folgt:

$mysqli = NEW MySQLi('host', 'databse username', 'password', 'database');
0
mattmattmattmat 
Fragesteller
 12.02.2017, 20:00
@Niklas

Und warum? In wiefern hilft mir das beim Problem weiter?

Wie bereits gesagt, ich kann über php updaten und insert nutzen. Eine Verbindung ist somit aufgebaut. Es geht um den Select.

0
Niklas  12.02.2017, 20:08
@mattmattmattmat

Die beschriebene Methode ist neuer. Es geht dabei einfach nur darum, sie einzusetzen und den Code auf dem neuesten Stand zu halten. So beugst du Kompatibilitätsfehler vor.

Dein Code ist nicht fehlerhaft, daher weiß ich nicht, wodurch der Fehler ausgelöst wird.

Hast du auch die Form beachtet?

$servername = "server";
$username = "user";
$password = "pw";
$dbname = "db";
0

Die Variablen oben müssen in Anführungszeichen und ein Semikolon dahinter.


samyxd  12.02.2017, 20:09

Teste außerdem

foreach (mysqli_query($link, $bla) as $row) {

   echo $row[wasauchimmer];

}

0

Also das ist schon mal falsch:

$servername = server
$username = user
$password = pw
$dbname = db


echo $row[wasauchimmer];


es muss so aussehen:

$servername = 'server';
$username = 'user';
$password = 'pw';
$dbname = 'db';

echo $row['wasauchimmer'];

denn sonst wird angenommen, dass wasauchimmer etc. Konstanten sind (wenn es diese nicht gibt, kann es trotzdem funktionieren, bleibt aber halt trotzdem falsch ;)). Und beim Servernamen etc halt ebenso sowie immer ein Semikolon ans Ende.


Am Anfang und Ende habe ich das obligatorische <?php ?> gesetzt

Ist am Ende nicht nötig wenn nach dem PHP Code nichts anderes (z.B. HTML) mehr kommt (nicht falsch, nur unnötig).

Und wenn es mit den korrekten Anführungszeichen immer noch nicht funktioniert, dann füge doch am Anfang der Datei mal das ein: 

<?php 
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Damit sollte dir dann auch eine entsprechende Fehlermeldung angezeigt werden.

Außerdem baust du wie es aussieht die mysqli-Verbindung mit der Prozeduralen Variante auf, versuchst aber nachher das Query objektorientiert auszuführen, das funktioniert natürlich nicht, entweder das eine oder das andere.

Wenn du die Verbindung prozedural aufbaust, dann muss das Query so aussehen:

foreach (mysqli_query($link, $bla) as $row) {
....

Siehe dazu auch: http://php.net/manual/de/mysqli.quickstart.dual-interface.php



mattmattmattmat 
Fragesteller
 13.02.2017, 13:33

Leider wird mit mit dem Code keine Fehlermeldung angezeigt. Auch habe ich die prozedurale Variante durchgezogen, ohne Erfolg. Der vollständigkeits halber, mein Code sieht nun so aus:

<?php 
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$servername = "server";
$username = "user";
$password = "password";
$dbname = "dbname";
/* Attempt MySQL server connection. Assuming you are running MySQL
server with default setting (user 'root' with no password) */

$link = mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}

$bla = "SELECT wasauchimmer FROM Accounts where User = 'Testuser'";

foreach (mysqli_query($link, $bla) as $row) {
echo $row['wasauchimmer'];
}

// Close connection
mysqli_close($link);
?>
0
mattmattmattmat 
Fragesteller
 13.02.2017, 13:37
@mattmattmattmat

Mir kommt es bald so vor, als ob er erst garnicht in die Schleife gelangt... Wie gesagt, Verbindung funktioniert (wenn ich beispielsweise eine Update-Query reinsetze geht diese) und der Select funktioniert in der grafischen phpMyAdmin Oberfläche ebenfalls mit einem korrekten Output.

0
mastema666  13.02.2017, 14:00
@mattmattmattmat

Ob das Script in der Schleife ankommt kannst du ja durch eine Testausgabe überprüfen, z.B.:

foreach (mysqli_query($link, $bla) as $row) {
  echo 'angekommen :)';
echo $row['wasauchimmer'];
}

Aber was das eigentliche Problem angeht, meine mysqli-Kenntnisse sind leider etwas eingerostet (benutze in der Regel nur PDO), aber gibt mysqli_query() nicht nur das Result selbst zurück? Also müsste man die Daten dann ja noch "fetchen", etwa so:

$bla =  "SELECT wasauchimmer FROM Accounts where User = 'Testuser'";
$result = mysqli_query($link, $bla);

foreach (mysqli_fetch_array($result) as $row) {
echo $row['wasauchimmer'];
}
0
mattmattmattmat 
Fragesteller
 13.02.2017, 18:58
@mastema666

Wir nähern uns! Fetchen bringt es nicht, aber ich habe ein extra echo getestet um die Ausgabe zu checken. Als Output bekomme ich


angekommen :)gangekommen :)g

Was interessant ist, da ich den echo nur einmal drin hab + die Zelle, welche ich ausgeben will, besitzt den String 'geheim'.

Davon wird nur das g ausgegeben (das ist mir vorher nicht aufgefallen, da danach ein Hash zusätzlich ausgegeben wird und das dort in der kryptischen Zeichenfolge untergegangen ist). Statt 'geheim' wird mir also nur das 'g' angezeigt und das ganze zweimal.

Was meintest du bzgl. des fetchen mit "bringt nur das Resultat zurück"? Genau das wollte ich doch: Das Resultat bzw. Ergebnis der Query (select) in die Variable $bla.

Die Schleife sieht aktuell wie folgt aus:

$bla =  "SELECT wasauchimmer FROM Accounts where User = 'Testuser'";
$result = mysqli_query($link, $bla);

foreach (mysqli_fetch_array($result) as $row) {
echo 'angekommen :)';
echo $row['wasauchimmer'];
}
0
mastema666  13.02.2017, 19:33
@mattmattmattmat

Dass das 2 mal ausgegeben wird, heißt einfach, dass es 2 Datensätze gibt, die von dem Query zurückgegeben werden.

Da du ja nach Spaltenname ausgibst, versuch es mal mit mysqli_fetch_assoc() statt mysqli_fetch_array().

Sollte auch das nicht funktionieren, dann gibt mal aus, was denn überhaupt in $row steht, also am besten gleich mal so:

$result = mysqli_query($link, $bla);

foreach (mysqli_fetch_assoc($result) as $row) {
  var_dump($row);
}
0
mattmattmattmat 
Fragesteller
 15.02.2017, 11:40
@mastema666


mysqli_fetch_assoc() gibt mir weiterhin nur das 'g' statt 'geheim'. Hab mal den dump ausgegeben:

string(6) "geheim"

und genau dieses geheim bräuchte ich als Ausgabe. Merkwürdig.


0
mastema666  15.02.2017, 11:42
@mattmattmattmat

Ok, dann ist in $row also nicht der Array, sondern direkt der String, also einfach direkt $row benutzen statt $row['wasauchimmer'].

0
mattmattmattmat 
Fragesteller
 15.02.2017, 11:43
@mastema666

Nachtrag: ES GEHT! statt var_dump($row) habe ich

echo ($row) 

genutzt und bekomme als Ausgabe geheim. Vielen Dank für dein Hilfe!

0