2012-11-11 122 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