1

我在 Java(不是 Javascript)中使用 HttpURLConnection 来调用一个 PHP 文件,该文件在 mySQL 数据库中查找一个字段。在 PHP 中如何返回字段内容(字符串),在 Java 中如何接收它们?谢谢你。任何可以提供帮助的人都很棒。哈哈。

示例代码:

爪哇:

import java.net.HttpURLConnection;
import java.net.URL;
...
public static void Connect(String address){
    URL url = new URL("http://www.foo.com/getInfo.php?id=203&user=johndoe);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    String = ??? // What do I need to do to get the string from the PHP file?
    con.disconnect();
}

PHP:

<?php

$theFile = "../db_user_password";
$f = fopen($theFile, 'r') or die("Could not access password file.");
$user = chop(fgets($f));
$pass = chop(fgets($f));
$name = chop(fgets($f));
if (strlen($name) == 0) {
    $name = 'some_db';
}
fclose($f);

$connect = mysql_pconnect("localhost", $dbuser, $dbpass) or
        die('Could not connect: ' . mysql_error());

mysql_select_db($name, $connect) or die("Could not find database");

$id = urldecode($_GET['id']);
$user = urldecode($_GET['user']);

$query = "SELECT data FROM autosave_table WHERE id='$id' AND user='$user';
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);

$updateQuery = "";
if ($num_rows == 1) {
    //What do I put here to return a string from data?
}

mysql_query($updateQuery);

?>
4

2 回答 2

2

我能想到的最简单的方法是只输出“数据”字段的内容,后跟换行符(data当然假设不包含换行符),这样就可以使用BufferedReader 的readLine()方法。

php端:

if ($num_rows == 1) {
    $row = mysql_fetch_assoc($result);
    printf("%s\n",$row['data']);
}

Java端:

BufferedReader in = new BufferedReader(new InputStreamReader(
                                con.getInputStream()));
String message = in.readLine();
in.close();

当然需要一些额外的错误检查,但这是本质。您还可以序列化dataJSON 或 XML 格式的内容,并在 Java 端反序列化,但对于看起来很简单的用例,这很可能是矫枉过正。

于 2013-07-17T22:23:32.517 回答
1
InputStream inputStream = new BufferedInputStream(con.getInputStream());

Scanner scanner = new java.util.Scanner(inputStream);
String response = "";
while (scanner.hasNextLine())
{
     response += scanner.nextLine();
}

...

您还需要在 PHP 文件中输出一些echo内容,感兴趣的字段上的简单内容将在响应中输出。

于 2013-07-17T22:23:12.637 回答