Reputation: 631
I am trying to retrieve specific data from my MySQL database by passing the value of the parameter from Android and then read this value in a PHP script in the query in order to return the data.
When I run the application an error parsing data exception occurs because the returned result value is null?
Why the result is null? Is the error from the PHP script or from my java code ?
please help me
Thanks in advance!
city.php:
<?php
mysql_connect("localhost","username","password");
mysql_select_db("Countries");
$sql=mysql_query("select City_Population from City where Name= "'.$_REQUEST['Name']."'");
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>
Blockquote
java class:
public class ConnectActivity extends ListActivity {
String add="http://10.0.2.2/city.php";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Connect().execute();
}
private class Connect extends AsyncTask<Void,Void,String>
{
private String result = "";
private InputStream is=null;
private String city_name="London";
protected String doInBackground(Void... params) {
try
{
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("Name",city_name));
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(add);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}
catch(Exception e)
{
Log.e("log_tag", "Error in http connection "+e.toString());
}
//convert response to string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),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());
}
return result;
}
protected void onPostExecute(String result){
try{
JSONArray jArray = new JSONArray( result);
JSONObject json_data=null;
for(int i=0;i<jArray.length();i++)
{
json_data = jArray.getJSONObject(i);
int population=json_data.getInt("City_Population");
TextView City_Name =(TextView)findViewById(R.id.city_name);
TextView City_population=(TextView)findViewById(R.id.city_pop);
City_Name.setText(json_data.getString(city_name));
City_population.setText(population+" " );
}
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
}
}
}
Upvotes: 4
Views: 1950
Reputation: 96159
a) Your script is prone to sql injections. You need to encode the $_REQUEST[...] parameter properly before putting it into the sql query string.
b) You need some error handling. Any of the mysql_* functions can fail and your script must handle those error conditions. Since the client expects some json data just return the error message/code as an json encoded array as well.
c) You might want to set the Content-type
header to application/json
, see RFC 4627 and http://docs.php.net/function.header
<?php
define('DEBUG_DETAILS', true);
function onError($msg, $details) {
$msg = array(
'status'=>'error',
'message'=>$msg
);
if ( defined('DEBUG_DETAILS') && DEBUG_DETAILS ) {
$msg['details'] = $details;
}
die(json_encode($msg));
}
$mysql = mysql_connect("localhost","username","password") or OnError('database connection failed', mysql_error());
mysql_select_db("Countries", $mysql) or OnError('database selection failed', mysql_error($mysql));
$query = "
SELECT
City_Population
FROM
City
WHERE
Name='%s'
";
$query = sprintf($query, mysql_real_escape_string($_REQUEST['Name'], $mysql));
$sql=mysql_query($query, $mysql) or OnError('query failed', array('query'=>$query, 'errstr'=>mysql_error($mysql)));
$output = array(
'count'=>0,
'records'=>array()
);
while( $row=mysql_fetch_assoc($sql) ) {
$output['records'][]=$row;
$output['count']+=1;
}
echo json_encode(array(
'status'=>'ok',
'result'=>$output
));
Your android client should receive an object literal like e.g.
{
status:"ok",
result: {
'count': 2,
'records': [ 10000, 15000]
}
}
or
{
status:"error",
message: "database connection failed",
setails: "...."
}
Upvotes: 1
Reputation: 2355
<?php
$name=$_POST['NAME'];
mysql_connect("localhost","username","password");
mysql_select_db("Countries");
$sql=mysql_query("select City_Population as citypop from City where Name='$name' ");
while($row=mysql_fetch_assoc($sql))
$output=$row['citypop'];
print(json_encode($output));
mysql_close();
?>
You try this sure it will work .
Upvotes: 2