0

我有一个调用远程 php 将数据插入 mysql 表的 Android java 方法。

这是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 端执行的“日志”?

非常感谢。凝胶

4

2 回答 2

3

backtick对列名和/或 tableNames使用而不是单引号

INSERT INTO mytable(`email1`,`email2`) VALUES('$email1','$email2')

你什么时候用反引号?

例如,

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

并且您的查询很容易受到攻击SQL Injection,请花点时间阅读下面的文章

于 2012-11-11T12:25:52.607 回答
1

查看您的HttpResponse/HttpEntity. 在那里您应该看到“成功”或“插入内容错误”。您还可以在响应中添加具体errnoerror字符串,看看到底出了什么问题。

您还可以在请求中混合使用 HTTP POST 和 HTTP GET。在客户端,您使用 HttpPost 对象,而在服务器端,您希望设置 _GET 变量。您必须在双方都使用 GET 或 POST 。否则客户端和服务器将无法相互理解。

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

于 2012-11-11T12:34:31.310 回答