Php Json读取mysql列,其中列=$variable

Php Json读取mysql列,其中列=$variable,php,android,mysql,json,post,Php,Android,Mysql,Json,Post,我希望在同一届会议上按此顺序实现以下目标: 获取android变量(imei) 将变量发送到php 在sql中使用变量 将结果发送回android 我使用以下方法: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_contacts); // 01 - fi

我希望在同一届会议上按此顺序实现以下目标:

  • 获取android变量(imei)
  • 将变量发送到php
  • 在sql中使用变量
  • 将结果发送回android
  • 我使用以下方法:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contacts);
    
         // 01 - first i get imei
         TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
         IMEI = mngr.getDeviceId();
    
        // 02 - then i call class to post imei to php
        new loadData().execute();
    
         // 03 - on php side i use "select ... where $imei ..." 
    
        // 04 - get the results back to android
    // (yes i am aware that this method is commented out, i will explain why below)
        //accessWebService();
    
        }
    
    职位:

    class loadData扩展了异步任务{
    私家侦探;
    私人关系;
    专用HttpResponse请求;
    私有输入流是;
    @凌驾
    受保护的void onPreExecute(){
    super.onPreExecute();
    }
    @凌驾
    受保护的字符串doInBackground(字符串…arg0){
    ArrayList nameValuePairs=新的ArrayList();
    字符串imeino=String.valueOf(IMEI);
    添加(新的BasicNameValuePair(“imeino”,imeino));
    尝试
    {
    HttpClient HttpClient=新的DefaultHttpClient();
    HttpPost HttpPost=新的HttpPost(“http://blah/contacts.php");
    setEntity(新的UrlEncodedFormEntity(nameValuePairs));
    HttpResponse response=httpclient.execute(httppost);
    HttpEntity=response.getEntity();
    is=entity.getContent();
    InputStreamReader ireader=新的InputStreamReader(is);
    BufferedReader bf=新的BufferedReader(ireader);
    sb=新的StringBuilder();
    字符串行=null;
    而((line=bf.readLine())!=null){
    某人附加(行);
    }
    Log.e(“通过1”,“连接成功”);
    }
    捕获(例外e)
    {       
    Log.e(“错误发送”,例如toString());
    }
    返回id;
    }
    }
    
    得到

    私有类JsonReadTask扩展了AsyncTask{
    @凌驾
    受保护的字符串doInBackground(字符串…参数){
    HttpClient HttpClient=新的DefaultHttpClient();
    HttpPost HttpPost=新的HttpPost(参数[0]);
    试一试{
    HttpResponse response=httpclient.execute(httppost);
    jsonResult=inputStreamToString(response.getEntity().getContent()).toString();
    System.out.println(“jsonResult:+jsonResult”);
    }
    捕获(客户端协议例外e){
    e、 printStackTrace();
    }捕获(IOE异常){
    e、 printStackTrace();
    }
    返回null;
    }
    私有StringBuilder inputStreamToString(InputStream为){
    字符串rLine=“”;
    StringBuilder answer=新建StringBuilder();
    BufferedReader rd=新的BufferedReader(新的InputStreamReader(is));
    试一试{
    而((rLine=rd.readLine())!=null){
    答:追加(rLine);
    }
    }
    捕获(IOE异常){
    //e.printStackTrace();
    Toast.makeText(getApplicationContext(),
    “错误…”+e.toString(),Toast.LENGTH_LONG).show();
    }
    返回答案;
    }
    @凌驾
    受保护的void onPostExecute(字符串结果){
    ListDrwaer();
    }
    }//结束异步任务
    public void accessWebService(){
    JsonReadTask=新建JsonReadTask();
    //传递URL字符串数组的值
    task.execute(新字符串[]{”http://blah/contacts.php" });
    }
    //为列表视图生成哈希集
    公共无效列表{
    试一试{
    JSONObject jsonResponse=新的JSONObject(jsonResult);
    JSONArray jsonMainNode=jsonResponse.optJSONArray(“联系信息”);
    for(int i=0;i
    PHP:

    
    
    好的,下面是关于代码的故事:

    当我只是发布[
    newloaddata().execute()
    ]而没有获取[
    accessWebService();
    ]时,我可以读取我的
    $imei=isset($\u POST['imeino'])$_POST['imeino']:''变量为
    0000000000000
    ,但是我当然不能返回结果,因为
    accessWebService()
    被注释掉了

    但是,当我取消注释
    accessWebService()
    时,我可以将结果返回到android,但它们是
    null
    ,因为现在
    $imei=isset($\u POST['imeino'])$_POST['imeino']:''为空

    因此,总结一下:

    无论何时调用GET方法,我都会丢失POST变量

    PHP

    要在PHP中支持
    GET
    POST
    变量,可以使用:

    检查参数是否已设置也是明智的,如果未设置,则返回错误:

    if ( empty($imei) ) {
        echo json_encode( array( 'error' => 'Missing imeino parameter' ) );
        return;
    }
    
    而且,非常重要的是,在将输入传递给mysql之前,请对其进行清理。这是危险的:

    $sql = "select * from users WHERE IMEI ='$imei'"; 
    
    因为有人可能会用
    contacts.PHP?imeino='调用您的PHP脚本;删除表用户的
    。了解更多信息

    顺便说一句;我建议使用

    Java

    访问API的
    GET
    方法只需稍作更改即可将
    imeino
    参数传递给PHP脚本:

     public void accessWebService( String imei ) {
        JsonReadTask task = new JsonReadTask();     
        task.execute(new String[] { "http://blah/contacts.php?imeino=" + imei });
     }
    

    而且,您需要使用IMEI调用
    accessWebService

    没错。您可以使用
    $\u GET
    ,或者同时支持
    $\u POST
    $\u GET
    $imei = isset($_REQUEST['imeino']) ? $_REQUEST['imeino'] : '';
    
    if ( empty($imei) ) {
        echo json_encode( array( 'error' => 'Missing imeino parameter' ) );
        return;
    }
    
    $sql = "select * from users WHERE IMEI ='$imei'"; 
    
     public void accessWebService( String imei ) {
        JsonReadTask task = new JsonReadTask();     
        task.execute(new String[] { "http://blah/contacts.php?imeino=" + imei });
     }