der bär: Resource Id#2???

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

  1. 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

    --
    "Nobody will ever need more than 640k RAM!"
    1981 Bill Gates
    1. 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

      1. 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

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. 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

          1. 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

            1. 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

              1. 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

                1. 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

                  1. 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

                    1. 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

                      1. 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

                        1. 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

                          1. 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

                    2. 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

                      --
                      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
              2. Halihallo der bär

                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*

                :-)
                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

      2. 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

  2. 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

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|