为什么数据无法从Android应用程序插入到MySQL

时间:2012-02-15 09:35:28

标签: java android mysql database phpmyadmin

我创建了我的数据库MySQL,我希望将Android应用程序中的数据发送到数据库,但我无法这样做。我正在使用wamp服务器。

这是我的PHP代码:

<?php mysql_connect("localhost","cupcake","123456");
mysql_select_db("cindy");
$sql=mysql_query("insert into yang (name)values('".$_REQUEST['i_name']."')");
$r=mysql_query($sql);
if(!$r)echo "Error in query: ".mysql_error();mysql_close();?>

这是我在Android上的Java文件

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);



        String result = null;
        JSONArray jArray;
        InputStream is = null;
        StringBuilder sb=null;


        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

        nameValuePairs.add(new BasicNameValuePair("i_name","aaa"));
        try{     

            HttpClient httpclient = new DefaultHttpClient();

             HttpPost httppost = new HttpPost("http://10.0.2.2/testing.php");
             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());
            }



        try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
             sb = new StringBuilder();
             sb.append(reader.readLine() + "\n");
             String line="0";
             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());
              }//paring datatry


        try {
            jArray = new JSONArray(result);
           //int[] deal_id=new int[jArray.length()+1];
            JSONObject json_data=null;
            for(int i=0;i<jArray.length();i++){
                   json_data = jArray.getJSONObject(i);
                            }
            }      catch(JSONException e1){
                   } catch (ParseException e1) {
                e1.printStackTrace();   }
          }}

这是我提出的MySQL表

--

CREATE TABLE IF NOT EXISTS `yang` (
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`name`)
) 

请帮帮我......谢谢......

3 个答案:

答案 0 :(得分:0)

这种开发可能很难调试,所以我总是会使用大量的日志记录。

例如,在PHP中添加:

error_log(“插入名称:”。$ _REQUEST ['i_name']);

然后,您可以检查服务器错误日志,以确保获得预期的结果。继续添加日志记录语句,直到找到问题为止。

PS:我不是PHP方面的专家,但我觉得你的PHP很容易受到SQL注入攻击,所以你可能不想部署它!

答案 1 :(得分:0)

我同意你应该尝试尽可能多地记录日志,看看发生了什么。

我假设您正在将此Android应用程序部署到您的手机或模拟器,对吗?在本机浏览器中,您可以转到http:// 10.0.2.2 /testing.php并验证这不是本地网络连接问题吗?

另外,您是否独立测试过您的PHP代码?你确定它有效吗?

最后,您的PHP脚本容易受到SQL注入攻击。您永远不希望将来自用户的任何数据直接连接到SQL语句中。使用预准备语句来处理此问题。 PHP有一个可以使用的PDO库。这是一个教程(http://www.kitebird.com/articles/php-pdo.html) - 您可以遵循许多其他教程。只需谷歌PHP PDO准备语句教程或其他东西

让我知道您对上述问题的答案。

答案 2 :(得分:0)

您在android java文件中提供localhost地址,即10.0.2.2,据我所知,它不起作用。打开命令提示符并键入ipconfig,然后按Enter键。之后检查你的ip v4地址,它将以192.168开始....复制该地址,如果项目正在运行,则在搜索栏中用这个替换localhost ip。实际上android取域名而不是localhost。并使用它更改为android java文件。希望它会奏效。感谢