我想從mysql數據庫中獲取所有名稱和姓氏的列表,但僅限於用戶訪問該服務的某個用戶名和密碼。 我試着用下面的代碼,但似乎不工作。其實我得到的JSONArray是EMPTY。 這裏我的java代碼和PHP代碼(這是在服務器上)。 如果我不通過用戶名和密碼進行過濾,整個代碼工作得很好,所以實際上我收到了列表。但是,當我嘗試按用戶名和密碼進行過濾時,JsonArray爲空。 請任何線索我會感激!如何從一個mysql數據庫中獲取特定元素作爲Json
public class ApiConnector {
public JSONArray GetAllCustomers(User user){
String url = "http://giacomoci.co.uk/FetchallDataList.php";
ArrayList<NameValuePair> dataToSend = new ArrayList<>();
dataToSend.add(new BasicNameValuePair("username", user.username));
dataToSend.add(new BasicNameValuePair("password", user.password));
HttpParams httpRequestParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);
DefaultHttpClient httpClient = new DefaultHttpClient(httpRequestParams);
HttpPost post = new HttpPost(url);
JSONArray jsonArray = null;
try {
//DefaultHttpClient httpClient = new DefaultHttpClient();
//HttpGet httpGet = new HttpGet(url);
post.setEntity(new UrlEncodedFormEntity(dataToSend));
HttpResponse httpResponse = httpClient.execute(post);
HttpEntity httpEntity = httpResponse.getEntity();
if(httpEntity != null){
try {
String entityResponse = EntityUtils.toString(httpEntity);
Log.e("Entity Response : ", entityResponse);
jsonArray = new JSONArray(entityResponse);
}catch (JSONException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
} catch (ClientProtocolException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
return jsonArray;
}
}
在這裏,我的PHP代碼
$username = $_POST["username"];
$password = $_POST["password"];
$statement = mysqli_prepare($con, "SELECT name, surname FROM Contacts WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($statement, "ss", $username, $password);
$user[] = array();
while($row = mysqli_fetch_assoc($statement)){
$user[] = $row;
}
echo json_encode($user);
mysqli_close($con);
所以,如果我刪除 「其中,username =?AND PASSWORD =?」和下面的一切都很順利,但我得到所有用戶名和密碼的名字和姓氏,因爲我不想。這段代碼有什麼問題?
你真的應該使用PHP的[內置函數(http://jayblanchard.net/proper_password_hashing_with_PHP.html)來處理密碼的安全性。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。 –
單獨訪問URL會生成一個JSON字符串,因此如果將POST值傳遞給它不會產生JSON字符串,那麼您應該嘗試使用MySQL Workbench直接對MySQL數據庫運行SQL。 – MonkeyZeus
如果密碼是編碼的(實際上應該是這樣),那麼您的簡單腳本將找不到您正在查找的記錄。檢查你在數據庫中的數據。如果密碼被編碼,你需要找到它的編碼類型,並找出如何在你的php代碼中應用相同的編碼來比較密碼值。 – ggg