2012-11-11 121 views
0

我有一个Android java方法,它调用远程php来将数据插入到mysql表中。用java和php插入mysql:没有错误,但没有插入

这是Java代码客户端:

public static void insert(String email1, String email2) { 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("email1", email1)); 
    nameValuePairs.add(new BasicNameValuePair("email2", email2)); 

    try { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost("myserver:8080/insert.php"); 
     httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    //How to catch and print php echo() here?? 
} 

,这是insert.php服务器端(重新编辑):

<?php 
    $mysqli_connection = new mysqli("localhost:3306", "root", "password", "mydb"); 
    if ($mysqli_connection->connect_errno) { 
     echo ("Connection Failure"); 
     exit(); 
    } 


    $stmt = $mysqli->stmt_init(); 
    if ($stmt->prepare("INSERT INTO `mytable` (`email1`, `email2`) VALUES (?,?)")) { 
     echo 'Success'; 
     $stmt->bind_param("ss", $_GET['email1'], $_GET['email2']); 
     $stmt->execute(); 
     $stmt->close(); 
    } else { 
     echo 'Error Inserting Content'; 
    } 

    $mysqli->close(); 
?> 

当我打电话给我java insert()方法,没有异常返回,但没有插入完成和mytable为空。

  • 1)出了什么问题?
  • 2)如何查看发生了哪个错误?我怎样才能看到php端执行的“日志”?

非常感谢。 Geltry

回答

1

看着你HttpResponse/HttpEntity。你应该看到'成功'或'错误插入内容'。您还可以在回复中添加具体的errnoerror字符串,以查看真正出错的地方。

您还可以在请求中混合使用HTTP POST和HTTP GET。在客户端使用HttpPost对象,并且在服务器端希望设置_GET变量。您必须使用GET或POST 这两个双方。否则客户端和服务器不会相互理解。

With HttpEntity.getContent()您可以从InputStream中读取。另一种方法是使用EntityUtils.toString()来获取响应内容的字符串表示。

+0

我读HttpResponse/HttpEntity没有成功。你能告诉我怎么样?例如:httpEntity.getMessage()或类似的...谢谢 – Geltrude

+0

你是什么意思,没有成功?另请参阅修改后的答案。 –

+0

你的建议是对的(我在php.ini中没有mysqli库) – Geltrude

3

使用backtick而不是列名和/或表名

INSERT INTO mytable(`email1`,`email2`) VALUES('$email1','$email2') 
当你使用反引号

单引号?

例如,

CREATE TABLE `hello word`(`Record ID` INT,....) 

和您的查询与SQL Injection脆弱的,请花时间阅读下面的文章

+0

现在我正在使用反引号(当我放弃时,我也会解决注入问题......)。但它没有在我的表格中插入数据。我不知道如何读取'echo'php函数中打印的错误和消息。我无法获取它们读取HttpResponse/HttpEntity。:( – Geltrude

+0

+1,感谢您的注射和反提示建议:-) – Geltrude