Resource Id#2???
der bär
- datenbank
0 David Tibbe0 Tobias K.
Hi
ich möchte meine Mysql Datenbank mit dem folgenden Quelltext abfragen:
<?
mysql_connect("localhost","root","");
mysql_select_db("test");
$abfrage = "SELECT * FROM test WHERE id=1";
$ergebnis = mysql_query($abfrage);
echo $ergebnis;
?>
Ich hab alle Tabellen erstellt und im MySQLManager gibt er auch die eingetragenen Infos aus.
Wenn ich das ganze über PHP mache gibt er aber nur Resource id#2 zurück.
Wo liegt das Problem?
gruß der bär
Hallo
Wo liegt das Problem?
Welches Problem? Das ist richtig was er da macht! Als Ergebnis wird dir immer eine ResultID zurückgeliefert, die du per mysql_fetch_*() auswerten musst.
Lies dazu:
FAQs:
17.2. Wie greife ich auf eine MySQL-Datenbank zu?
http://www.dclp-faq.de/q/q-mysql-zugriff.html
Manual:
http://php3.de/mysql-query
http://php3.de/mysql-fetch-array
Grüße
David
Hi nochmal und danke für eure Hilfe aber,
es funktioniert immer noch net :-(
Quelltext sieht jetzt so aus:
<?
mysql_connect("localhost","root","");
mysql_select_db("test");
$abfrage = "SELECT * FROM test WHERE 1;
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_row($ergebnis))
echo $row
echo $ergebnis;
?>
und er sagt nur Parse Error in zeile 10 und da steht nur "?>"
was is jetzt los?
gruß der bär
Hallo der bär,
$abfrage = "SELECT * FROM test WHERE 1;
so bekommst du den gesamten Inhalt der Tabelle test - WHERE 1 ist immer true.
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_row($ergebnis))
am Ende dieser Zeile ist eine schließende Klammer ')' zu viel.
außerdem brauchst du vermutlich eine Schleife um alle Felder auszulesen.
echo $row
das wird dir vermutlich 'Array' ausgeben
du musst auf die einzelnen Felder mit $row[0], $row[1] usw. zugreifen
->http://www.php.net/mysql_fetch_row
einfacher ist es wenn du mysql_fetch_assoc() nimmst, dann kannnst du nämlich mit $row['spaltenname'] auf die Felder zugreifen.
->http://www.php.net/mysql_fetch_assoc
echo $ergebnis;
das gibt dir dein 'Resource Id#2' aus
und er sagt nur Parse Error in zeile 10 und da steht nur "?>"
Fehler können durchaus in einer der vorherigen Zeilen stehen - manchmal "merkt" der Parser auch erst in der letzten Zeile, das da was nicht stimmt.
Grüße aus Nürnberg
Tobias
Hi, ich habs jetzt mit einer Schleife versucht.
Quelltext:
<?
mysql_connect("localhost","root","");
mysql_select_db("test");
$abfrage = "SELECT name FROM tristan WHERE 1;
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_assoc($ergebnis))
{
echo $row[0];
};
?>
er sagt wieder Parse Error in der letzten Zeile...
was mach ich falsch?
gruß der bär
Halihallo der bär
$abfrage = "SELECT name FROM tristan WHERE 1;
was mach ich falsch?
Du hast das abschliessende '"' bei $abfrage = "SELECT name FROM tristan WHERE 1;
vergessen. Tu dir einen gefallen und schau dir deinen Code etwas besser an, bevor du
hier fragst; die Parsing Errors sind _immer_ darauf zurückzuführen, dass irgendetwas
bei deiner Syntax nicht stimmt (und _diese_ Fehler kannst du selber finden).
Viele Grüsse
Philipp
Halihallo, hier kommt das nächste Problem,
Ich hab es geschafft die Daten abzufragen allerdings schaff ich es jetzt nicht die Daten einzufügen.
hab einfach folgendes gemacht...
Quelltext:
if(!$name="" and $hidden="1")
{
INSERT INTO tristan (id, name) VALUES ('', '$name');
};
$name und $hidden sind Felder
mysql_connect und so hab ich schon vorher gemacht und er sagt auch, dass der Fehler in der INSERT.. Zeile liegt.
Was hab ich falsch gemacht *g*
gruß der bär
hallo,
if(!$name="" and $hidden="1")
mit einem einfachen = werden werte zugewiesen, vergleichen tust du mit ==.
außerdem, schlagt mich sollte ich mich irren, ist es nicht nötig, hinter der if-abfrage hier
if(!$name="" and $hidden="1")
{
INSERT INTO tristan (id, name) VALUES ('', '$name');
};
ein semikolon zu setzen.
grüße,
small-step
Hi
Ich hab eigentlich das, was ich nun haben wollte: ein Feld und dessen Inhalt in die MYsql Datenbank geschrieben wird und den Inhalt abrufen.
Allerdings schreibt den Inhalt vom letzten Post beim aktualisieren nocheinmal in die Db
Quelltext:
<?
//Vars
include("var.inc.php");
//Connection
$connect = @mysql_connect("$db_server","$db_server","$db_pass");
mysql_select_db("$db_table");
//INSERT
if (!$name=="" and $hidden=="hidden")
{
$insert = "INSERT INTO tristan (name) VALUES ('$name')";
$mysql_ok = mysql_query($insert);
}
else
{ }
?>
<html>
<body>
<form name="form1" method="post" action="">
<p>
<input type="text" name="name">
<input name="hidden" type="hidden" id="hidden" value="hidden">
</p>
<p>
<input type="submit" name="Submit" value="Submit">
</p>
</form>
</body>
</html>
<?
//SELECT
$abfrage = "SELECT * FROM tristan /*WHERE id=2/* ";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo $row->name;
};
//FREE
$free = mysql_free_result($ergebnis);
$free_ex = @mysql_query($free);
//CONN CLOSE
$db_close = @MYSQL_CLOSE($connect);
?>
Was hab ich falsch gemacht, was fehlt?
Danke nochmals für eure Hilfe besonders von Philipp.
gruß der bär
Halihallo der bär
//INSERT
if (!$name=="" and $hidden=="hidden")
Da fehlt ein ! vor $hidden :-)
Neuer Datensatz: $name _und_ $hidden _nicht_ _nichtleer_.
Viele Grüsse und bitte ;)
Philipp
Hallihallo Philipp H.
Stimmt nicht mit dem ! vor $hidden. Wird doch abgesendet vom Formular mit dem Wert hidden und wenn hidden false is dann wurd es ja nicht abgesendet.
Kannste mir nochmal bei dem Aktualisierungs Problem helfen?
Hängt das vielleicht an mysql_close oder free_results???
gruß der bär
Halihallo der bär
Stimmt nicht mit dem ! vor $hidden. Wird doch abgesendet vom Formular mit dem Wert hidden und wenn hidden false is dann wurd es ja nicht abgesendet.
Stimmt.
Hängt das vielleicht an mysql_close oder free_results???
Glaube ich nicht.
---
Du hast gesagt, dass der Eintrag beim aktualisieren nochmals in die DB geschrieben wird.
Das ist doch normal!? - Beim aktualisieren sendest du nochmals dieselben Informationen,
sprich: du sendest nochmals einen Namen und hidden=hidden, dein Script arbeitet
ordnungsgemäss, wenn es dann nochmals einen Datensatz speichert.
Oder was meinst du _genau_ mit deiner Aussage?
Viele Grüsse
Philipp
HalliHallo
Ich glaube dass du Recht hast. Er führt den letzten Schritt einfach nochmal aus. Eigentlich müsste ich die Werte doch mit free_results aus dem Zwischenspeicher löschen.
Was wäre denn eine Lösung für das Problem?
Ich wollte bei meinem Gästebuch(das ist mein Ziel *g*) eigentlich keine doppelten Einträge haben.
gruß der Bär
Halihallo der bär
Ich glaube dass du Recht hast. Er führt den letzten Schritt einfach nochmal aus. Eigentlich müsste ich die Werte doch mit free_results aus dem Zwischenspeicher löschen.
Ich glaube du hast den Sinn von free_results nicht verstanden. Lies dich nochmals in
der Doku dazu durch. free_results gibt einfach den Speicher wieder frei, den die
Ergebnismenge der SQL-Abfrage beansprucht.
http://www.php.net/manual/de/function.mysql-free-result.php
Was wäre denn eine Lösung für das Problem?
Reloadsperrung durch eine eindeutig generierte ID (diese zerfällt beim erstmaligen
einfügen des Datensatzes und ein zweites Einfügen mit derselben ID wird ignoriert).
Oder du leitest gleich in die Gästebuchübersicht weiter (vorzugsweise neues Script),
sodass das selbe Script nicht nochmal aufgerufen wird.
Oder du überprüfst anhand des Namens und der Message, ob der gleiche Datensatz bereits
gespeichert wurde (wenn ja, Fehlermeldung).
Ich wollte bei meinem Gästebuch(das ist mein Ziel *g*) eigentlich keine doppelten Einträge haben.
Sinnvoll ;)
Viele Grüsse
Philipp
Hallo Philipp,
if (!$name=="" and $hidden=="hidden")
!empty($name) tuts auch
Da fehlt ein ! vor $hidden :-)
oder $hidden!='hidden' :-)
Grüße aus Nürnberg
Tobias
Halihallo der bär
if(!$name="" and $hidden="1")
{
INSERT INTO tristan (id, name) VALUES ('', '$name');
};
$name und $hidden sind Feldermysql_connect und so hab ich schon vorher gemacht und er sagt auch, dass der Fehler in der INSERT.. Zeile liegt.
Was hab ich falsch gemacht *g*
:-)
INSERT INTO ist _kein_ PHP Befehl, sondern ein SQL-Query und dieser gehört zwischen
mysql_query gesetzt :-)
http://www.php.net/manual/de/function.mysql-query.php sollte dir helfen.
Und das, was small-step schon sagte: Vergleiche mit ==, Zuweisungen mit = und nach
if muss kein ';' stehen.
Viele Grüsse
Philipp
Halihallo der bär
$abfrage = "SELECT * FROM test WHERE 1;
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_row($ergebnis))
';' Fehlt.
echo $row
';' Fehlt.
echo $ergebnis;
?>
und er sagt nur Parse Error in zeile 10 und da steht nur "?>"
s. oben.
Viele Grüsse
Philipp
Hallo der bär,
$abfrage = "SELECT * FROM test WHERE id=1";
$ergebnis = mysql_query($abfrage);
du brauchst hier noch ein mysql_fetch_array (oder _rows/_assoc)
->http://www.php.net/mysql_fetch_array
echo $ergebnis;
mit einem einfachen echo $variable ist es bei Datenbankabfrage nicht getan, da diese ein Array zurückliefern.
Grüße aus Nürnberg
Tobias