【问题标题】:Why data cannot be inserted from Android Apps to MySQL为什么无法将数据从 Android 应用程序插入到 MySQL
【发布时间】:2012-03-06 15:32:32
【问题描述】:

我已经创建了我的数据库 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`)
) 

请帮帮我..谢谢...

【问题讨论】:

  • 你得到了什么?有什么错误吗?
  • @Thilo,我没有任何错误...我的代码可以工作,但我的表中没有数据..

标签: java android mysql database phpmyadmin


【解决方案1】:

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

例如,在你的 PHP 中添加:

error_log("正在插入姓名:" . $_REQUEST['i_name']);

然后您可以检查服务器错误日志以确保您得到了您所期望的。继续添加日志语句,直到找到问题为止。

PS:我不是 PHP 专家,但在我看来,您的 PHP 容易受到 SQL 注入攻击,因此您可能不想部署它!

【讨论】:

    【解决方案2】:

    我同意您应该尝试包含尽可能多的日志记录以查看发生了什么。

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

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

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

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

    【讨论】:

    • 手机还是模拟器? 10.0.2.2 仅适用于模拟器不适用于真实设备但在浏览器中检查是个好主意。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 2016-05-07
      • 2017-07-10
      • 1970-01-01
      • 2015-08-08
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多