PHP-Interface für Kommunikation Java-Applet - MySQL Server
Marko
- datenbank
0 Simon Reinhardt0 Marko
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
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
Hi Simon,
vielen Dank, ist echt nett von Dir, dass Du gleich den Code hinschreibst. Ich werd es gleich mal ausprobieren.
Gruss
Marko
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);
?>
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
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