Marko: PHP-Interface für Kommunikation Java-Applet - MySQL Server

Hallo@All,

Das Problem: Ich möchte aus einem Java-Applet (oder Application) auf einen MySQL Datenbankserver zugreifen. Nur der Webserver kann auf den DB-Server zugreifen, und nur PHP oder Perl läuft auf dem Webserver (normale Standardprovidersituation).
Also bräuchte ich ein PHP-Script, dass die Datenbankabfragen vom Applet (können über normale HTTP-Requests kommen) an den DB-Server weiterleitet, und das Ergebnis dann an das Applet zurückgibt.
Bevor ich mich jetzt selbst dran mache, wollte ich doch mal fragen, ob jemand von Euch sowas schonmal irgendwo im Web gesehen  hat.

Merci bien und einen schönen Samstag

Marko

  1. Hi!

    Also bräuchte ich ein PHP-Script, dass die Datenbankabfragen vom Applet (können über normale HTTP-Requests kommen) an den DB-Server weiterleitet, und das Ergebnis dann an das Applet zurückgibt.

    Wenn das Applet den Abfrage-String als Parameter an das Script postet (der Parameter heißt hier "query"), müsste es ungefähr so gehen:

    <?php
    $dblink = mysql_connect ("...host...", "...name...", "...pwd...") or die ("Could not connect");
    $result = mysql_db_query("...dbname...", $query, $dblink) or die ("Invalid query");

    while ($row = mysql_fetch_row($result))
    {
     for ($i=0; $i<count($row); $i++)
      echo $row[i];
     echo "---";
    }

    mysql_close ($dblink);
    ?>

    Das Applet müsste das Ergebnis natürlich noch parsen. Als Trennzeichen zwischen den Datensätzen habe ich "---" genommen, also ist das der Indikator für einen neuen Satz. Wenn Du die Anzahl der Felder in einem Satz kennst, brauchst Du den natürlich nicht.

    Falls Du jetzt noch mit dem Verarbeiten im Applet Probleme hast, dann komm nochmal wieder, da kann ich Dir dann eher helfen ;-)

    MfG Simon

    1. Hi Simon,

      vielen Dank, ist echt nett von Dir, dass Du gleich den Code hinschreibst. Ich werd es gleich mal ausprobieren.

      Gruss

      Marko

      1. So, ich hab das ganze noch ein bisschen ausgebaut, das Script liefert die Ergebnisse jetzt als ein XML-File. Da ich denke, dass es eventuell als Grundlage für irgendwelche Anwendungen auch für andere nützlich sein könnte, poste ich den Code. Es ist sicherlich nicht die optimale Lösung und vor allem fehlt jede Art der Fehlerbehandlung:

        <?php
        if($query == "" )
        {
          echo("<form action="sqlgate.php" method="post"><input type="Text" name="query" value="$query" size="20"><input type="Submit"></form>");
        }
        $dblink = mysql_connect ("servername", "user ", "passwort") or die ("Could not connect");
        $result = mysql_db_query("datenbankname", $query, $dblink) or die ("Invalid query");
        echo "<?xml version="1.0" standalone="yes" ?>";
        echo "<RESULTSET>";
        $rownumber = -1;
        while ($row = mysql_fetch_row($result))
        {
          $rownumber++;
          echo "<QUERYROW$rownumber>";
          for($i = 0; $i<count($row); $i++)
          {
            $fieldname = mysql_field_name( $result,$i );
            echo "<$fieldname>";
            echo $row[$i];
            echo "</$fieldname>";
          }
          echo "</QUERYROW$rownumber>";
        }
        echo "</RESULTSET>";
        mysql_close ($dblink);
        ?>

        1. Hi!

          Vielleicht noch ein paar Verbesserungen..

          <?php
          if($query == "" )
          {
            echo("<form action="sqlgate.php" method="post"><input type="Text" name="query" value="$query" size="20"><input type="Submit"></form>");

          Wofür das? Was soll ein Java-Applet mit einem Formular? Aber gut, damit ist es evtl. noch für andere Zwecke verwendbar.

          }
          $dblink = mysql_connect ("servername", "user ", "passwort") or die ("Could not connect");
          $result = mysql_db_query("datenbankname", $query, $dblink) or die ("Invalid query");
          echo "<?xml version="1.0" standalone="yes" ?>";
          echo "<RESULTSET>";
          $rownumber = -1;
          while ($row = mysql_fetch_row($result))
          {
            $rownumber++;
            echo "<QUERYROW$rownumber>";

          Damit ergäben sich ziemlich viele nicht vorher definierte Tags. Man könnte es auch als Attribut schreiben:
          echo "<queryrow number="$rownumber">";

          for($i = 0; $i<count($row); $i++)
            {
              $fieldname = mysql_field_name( $result,$i );
              echo "<$fieldname>";

          Das gleiche wie oben. Vielleicht so:
          echo "<field name="$fieldname">";

          echo $row[$i];
              echo "</$fieldname>";
            }
            echo "</QUERYROW$rownumber>";
          }
          echo "</RESULTSET>";
          mysql_close ($dblink);
          ?>

          Aber der Fall, dass XML als Transportformat für Datenbankergebnisse dient, ist doch sicher schon öfter aufgetreten. Gibt es da vielleicht schon eine standardisierte Sprache für? Müsste man sich mal informieren...

          VG Simon

          1. Hi nochmal!

            Aber der Fall, dass XML als Transportformat für Datenbankergebnisse dient, ist doch sicher schon öfter aufgetreten. Gibt es da vielleicht schon eine standardisierte Sprache für? Müsste man sich mal informieren...

            Und schon gefunden :-)
            Weiß nicht, ob das wirklich das geuschte ist, sieht aber so aus: http://www.w3.org/TR/2001/WD-xquery-20010607/

            Übrigens: noch eine Verbesserung (ja ich kann's nicht lassen :)

            echo $row[$i];

            echo htmlspecialchars($row[i]);

            VG Simon