Echo gibt Resource id #2 aus, statt 1

Hallo,

ich muss eine Spalte aus einer mysql-DB abfragen. Connection etc. läuft auch. Allerdings gibt das Echo hinterher 16 mal „Resource id #2“ aus, statt 16 mal „1“.

Dies ist der Code:

<?php $dbVerbindung = mysql_connect("bla bla", "ble ble", "blu blu");
echo mysql\_error(); $dbVerbindung = mysql\_select\_db("bla bla bla", $dbVerbindung); $sql = 'SELECT mail FROM eigentuemer\_mailadresse'; $result = mysql\_query($sql); while($array = mysql\_fetch\_assoc($result)) { echo $result; } ?\> Kannst du mir sagen, wie es richtig wäre? mfg, David

hi,
ganz kurze Antwort:
Du versucht das Arrayobjekt auszugeben. Du willst jedoch den Wert eines Arrayindexes ausgeben.

Da du wohl auf die Spalte mail zugreifen möchtest versuch mal:
while($array = mysql_fetch_assoc($result))
{
echo $result[„mail“];
}

Viele Grüße

Hallo,

ich muss eine Spalte aus einer mysql-DB abfragen.

Connection

etc. läuft auch. Allerdings gibt das Echo hinterher 16

mal

„Resource id #2“ aus, statt 16 mal „1“.

Dies ist der Code:

<?php :
$dbVerbindung = mysql\_connect("bla bla", "ble ble",

"blu

blu");
echo mysql_error();
$dbVerbindung = mysql_select_db(„bla bla bla“,
$dbVerbindung);

$sql = ‚SELECT mail FROM eigentuemer_mailadresse‘;
$result = mysql_query($sql);
while($array = mysql_fetch_assoc($result))
{
echo $result;
}
?>

Kannst du mir sagen, wie es richtig wäre?

mfg,
David

Ja :smile:

In $result steht bei dir lediglich der „Resource-
Handler“ drin. Das ist quasi ein Zeiger auf die
Rückgabe des SQLs. In der While-Schleife wird dieser
Resource-Handler der Funktion mysql_fetch_assoc()
übergeben, die nun zeilenweise die Daten zurückgibt.
Diese Daten landen in $array.
Um die Daten nun anzuzeigen, musst du auf $array
zugreifen, nicht auf $result. Da $array jedoch, wie der
Name schon sagt, ein Array ist :wink:, machst du anstatt
„echo $result;“ entweder

print_r($array); //gibt immer das gesamte Array aus,
was bei dir aber egal ist, weil du eh nur ein Feld
selektiert hast

oder

echo $array[‚mail‘]; // damit wird jeweils nur die
Spalte ‚mail‘ ausgegeben

Ich denke das wars schon.

Gruß, Tobias

Hallo würde sagen falsche Variable.

In der While-Schleife nimmmt $array das resultat auf

echo $array
bzw echo $array[0] $array[1] …

Hallo würde sagen falsche Variable.

In der While-Schleife nimmmt $array das resultat auf

echo $array
bzw echo $array[0] $array[1] …

Hallo David,

Du lädst jeweils einen Datensatz aus der Ergebnistabelle in die Variable $array, versuchst dann aber erneut $result auszugeben.

while($array = mysql_fetch_assoc($result))
{
echo $result;
}

Richtig wäre, entweder print_r($array) oder echo $array[‚mail‘].

Hoffe geholfen zu haben.
Jens

Hallo David,

dass Du 16x „resource id #2“ zurückbekommst liegt daran, dass $result lediglich ein Resourcepointer ist, der von mysql_query zurückgeliefert wird.
In der Funktion mysql_fetch_assoc wird dann der Pointer übergeben und die „tatsächlichen“ Werte aus der SQL Abfrage geholt.

Allerdings frage ich mich, wieso Du 16x eine 1 erwartest?
Laut SQL Statement fragst Du nach E-Mail-Adressen, sollten dann nicht 16 E-Mail-Adressen erwartet werden?

Richtig wäre es so:

$sql = ‚SELECT mail FROM eigentuemer_mailadresse‘;
$result = mysql_query($sql);
while($array = mysql_fetch_assoc($result))
{
echo $array[‚mail‘];
}

Empfehle Dir hierfür auch die offizielle PHP Doku:
http://de3.php.net/manual/en/function.mysql-query.php

Hoffe das hilft Dir weiter

Gruß
Mathias

Danke Christoph,
funzt mit $array[‚mail‘]…

mfg,
David

Hallo David,

Hallo,

Allerdings frage ich mich, wieso Du 16x eine 1 erwartest?
Laut SQL Statement fragst Du nach E-Mail-Adressen, sollten
dann nicht 16 E-Mail-Adressen erwartet werden?

Sehr gut. Du denkst mit :smile:
das ganze war erstmal nur ein Test. Aus diesem Grund standen in der untersuchten Spalte nur einsen.
Da ich hinterher noch ein bisschen mit Zahlen gespielt habe, war das erstmal sinnvoller, als irgendwelche Texte in die Tabelle zu schreiben

Richtig wäre es so:

$sql = ‚SELECT mail FROM eigentuemer_mailadresse‘;
$result = mysql_query($sql);
while($array = mysql_fetch_assoc($result))
{
echo $array[‚mail‘];
}

Wunderbar, so klappt es.

Empfehle Dir hierfür auch die offizielle PHP Doku:
http://de3.php.net/manual/en/function.mysql-query.php

Danke, die Doku hab ich mir gestern schon mal ein bisschen angeschaut. Die bringt mich durchaus weiter. SQL scheint sooo kompliziert nicht zu sein…

Hoffe das hilft Dir weiter

Hilft sehr.

Gruß
Mathias

mfg,
David

Super,
danke. mit $array[‚mail‘]gehts.
Habs jetzt nicht mit print_r… ausprobiert.

Dann mal rein aus Interesses. Wenn du Zeit und Lust hast, kannst du mir ja kurz antworeten.
Was macht „echo“ und was macht „print“? Wann benutzt man generell wekchen Befehl?

mfg,
David

Hallo Peter,
so geht es: $array[‚mail‘];

mfg,
David

Hi,
danke für deine ausführliche Antwort.
So geht es natürlich.
mfg,
David

Danke,
klappt.

mfg,
David

Hallo David,
„echo()“ macht nahezu dasselbe wie „print()“, nämlich einen String ausgeben.
Das angesprochene „print_r“ vermag auch Arrays auszugeben, was bei „echo()“ nur zu der Ausgabe „Array“ führt.

Weitere Hilfe zu dem Thema findest Du bei php.net in der Dokumentation.

bis dann,
Jens

Danke jens,
die php.net Doku konsultiere ich die ganze Zeit schon. Ist aber für einen Anfänger auch relativ unübersichtlich…
Ich versuch mich durch zu beißen.

Wenn du Zeit und Lust hast, könntest du dir dann mal das hier anschauen und sagen, warum es nicht funktioniert?
Das ganze soll bei Klick auf „novo“ den eingegebenen Namen in die meine Tabelle schreiben.
Die If-Bedingung ist da, weil später noch mehr kommt.
Leider wird nur etwas in die Tabelle geschrieben, wenn ich
" if ($do != „novo“) " schreibe.
Meinem Verständnis nach, müsste es aber genau anders herum sein.

Novo cliente: Escreve o nome na tabela energia_teste, numa nova linha na clouna „cliente“
Nome:

<?php // novo cliente
if ($do == "novo") { $client = $\_POST['client']; mysql\_query("INSERT INTO energia\_teste (cliente) VALUES ('$client')"); } else { echo "nope"; } // novo cliente fim $db\_close=mysql\_close($db\_connect); ?\> mfg, David

Hallo David,
evtl. ist $do leer, weil „register_globals“ aus ist.

Probier es mal mit $_POST[‚do‘]

bis dann,
Jens

Top!
Danke.
Es geht weiter…