0

わかりましたので、いくつかのパラメーターに基づいて、オンライン データベースから特定のフィールドを取得する必要があります。
パラメーターは、Android アプリケーションから PHP スクリプトに渡す必要があります (1 つのパラメーターでは機能しますが、複数のパラメーターでは失敗します)。

PHP スクリプト

<?php error_reporting (E_ALL ^ E_NOTICE); ?>
<?php 
$username = "root";
$password = "";
$host = "localhost";
$dbname = "db.projectblue";

$chapter = mysql_real_escape_string($_POST['column']);
$id = mysql_real_escape_string($_POST['id']);

mysql_connect($host, $username, $password);
mysql_select_db($dbname);

$q=mysql_query("SELECT '$column' FROM tblphysics WHERE id='$id'");
while($e=mysql_fetch_assoc($q))
    $output[]=$e;

print(json_encode($output));

mysql_close();

?>

ご覧のとおり、SQL クエリは入力に基づいて動的に作成する必要があります。$column 変数をバージョンや章などの明確な列名に置き換えると機能しますが、変数では機能しません。

これは私のJAVAコードです

private JSONObject getJSONObject(int id, String column) {
    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
    nameValuePair.add(new BasicNameValuePair("column", column));
    nameValuePair.add(new BasicNameValuePair("id", Integer.toString(id)));


    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(PARSER_URL);
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePair));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();
    } catch (Exception e) {
        Log.e(LOG_TAG_JSON, "Error in http connection " + e.toString());
    }
    // convert response to string
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();

        result = sb.toString();
    } catch (Exception e) {
        Log.e("log_tag", "Error converting result " + e.toString());
    }
    try {
        JSONArray jArray = new JSONArray(result);
        JSONObject json_data = jArray.getJSONObject(0);

        return json_data;

    } catch (JSONException e) {
        Log.e(LOG_TAG_JSON, "Error parsing data " + e.toString());
    }
    return null;

}

そして、私はそのようにプライベートメソッドを呼び出しています

public String getChapter(int id) throws JSONException {
    JSONObject object = getJSONObject(id, "chapter");
    String iChapter = object.optString("chapter");

    return iChapter;
}

PHP スクリプトで 2 つの変数を使用してこのパブリック メソッドを呼び出すと、出力 (別のメソッドからのログ) は次のようになります。

Version (this is a column name in db) : 0 (should be 5)
Chapter (this is a column name in db) : chapter (should be newton)

私の質問は:
なぜ php スクリプトは複数の変数で動作しないのですか?
私の NameValuePair は正しく設定されていますか?
動的な列名やテーブル名を使用して SQL クエリを作成することはできますか?

編集:修正は非常に簡単で、見たこともありませんでした。$chapter の代わりに $column がクエリにあり、クエリの変数は ".$chapter." でなければなりません。

4

1 に答える 1

0

ヒント ヒント: クエリの前に、$coulmn をエコーし​​て $column 内に格納されている値を確認しないでください。

この例を参照して、疑問を解消して ください http://sarangasl.blogspot.com/2011/06/android-login-screen-using-httpclient.html

于 2013-07-18T02:48:12.793 に答える