0

リモートphpを呼び出してmysqlテーブルにデータを挿入するAndroidjavaメソッドがあります。

これはJavaコードのクライアント側です。

public static void insert(String email1, String email2) {
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("email1", email1));
    nameValuePairs.add(new BasicNameValuePair("email2", email2));

    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("myserver:8080/insert.php");
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    //How to catch and print php echo() here??
}

これはinsert.phpサーバー側です(再編集):

<?php   
    $mysqli_connection = new mysqli("localhost:3306", "root", "password", "mydb");
    if ($mysqli_connection->connect_errno) {
        echo ("Connection Failure");
        exit();
    }


    $stmt = $mysqli->stmt_init();
    if ($stmt->prepare("INSERT INTO `mytable` (`email1`, `email2`) VALUES (?,?)")) {
        echo 'Success';
        $stmt->bind_param("ss", $_GET['email1'], $_GET['email2']);
        $stmt->execute();
        $stmt->close();
    } else {
        echo 'Error Inserting Content';
    }

    $mysqli->close();   
?>

java insert()メソッドを呼び出すと、例外は返されませんが、挿入は行われず、mytableは空です。

  • 1)何が問題なのですか?
  • 2)どのエラーが発生したかを確認するにはどうすればよいですか?PHP側の実行の「ログ」を確認するにはどうすればよいですか?

どうもありがとうございます。ゲルトリー

4

2 に答える 2

3

backtick列名やtableNamesに一重引用符の代わりに使用する

INSERT INTO mytable(`email1`,`email2`) VALUES('$email1','$email2')

いつバッククォートを使用しますか?

例えば、

CREATE TABLE `hello word`(`Record ID` INT,....)

クエリは脆弱ですSQL Injection。以下の記事をお読みください。

于 2012-11-11T12:25:52.607 に答える
1

あなたのを調べてくださいHttpResponse/HttpEntity。「成功」または「コンテンツの挿入エラー」のいずれかが表示されます。応答に具体的な文字列を追加して、実際に何が問題になっているのかを確認することもできerrnoますerror

また、リクエストにHTTPPOSTとHTTPGETを混在させます。クライアント側ではHttpPostオブジェクトを使用し、サーバー側では_GET変数が設定されることを期待します。両側でGETまたはPOSTのいずれかを使用する必要があります。そうしないと、クライアントとサーバーはお互いを理解できません。

HttpEntity.getContent ()を使用すると、から読み取ることができますInputStream。もう1つのアプローチは、EntityUtils.toString()を使用して、応答のコンテンツの文字列表現を取得することです。

于 2012-11-11T12:34:31.310 に答える