php mysql 获取排名_php - 从MySQL表获取排名进入TextView

我有一个Android应用程序,该应用程序应根据用户的积分来获得用户的当前排名,并将其设置在已定义的textview“ txtRank”中。

这些值存储在MySQL中。当我执行代码时,我总是排名为null,但是当我仅在PHPMYADMIN上执行SQL语句时,它将给我正确的结果。

有任何想法吗?

这里是PHP:$uname = $_POST['uname'];

$sql1 = "SET @rownum := 0";

$sql2 = "SELECT rank, points FROM (

SELECT @rownum := @rownum + 1 AS rank, points, uname

FROM points ORDER BY points DESC

) as result WHERE uname=$uname";

mysql_query($sql1);

$result = mysql_query($sql2);

$rows = '';

$data = array();

if (!empty($result))

$rows = mysql_num_rows($result);

else

$rows = '';

if (!empty($rows)){

while ($rows = mysql_fetch_assoc($result)){

$data[] = $rows;

}

}

if ($sql2){

$response["success"] = 1;

$response["user"]["rank"] = $data[0]['rank'];

echo json_encode($response);

}else{

$response["error"] = 2;

$response["error_msg"] = "Something went wrong";

echo json_encode($response);

}

这里是AsynchTask和setText方法:

private static String KEY_SUCCESS = "success";

private static String KEY_ERROR = "error";

private static String KEY_RANK = "rank";

....

private class GetRank extends

AsyncTask {

String uname;

@Override

protected void onPreExecute() {

super.onPreExecute();

DatabaseHandler db = new DatabaseHandler(getActivity());

// Hashmap to load data from the Sqlite database

HashMap user = new HashMap();

user = db.getUserDetails();

uname = user.get("uname");

}

@Override

protected JSONObject doInBackground(String... args) {

UserFunctions userFunction = new UserFunctions();

JSONObject json = userFunction.getUserdata(uname);

return json;

}

@Override

protected void onPostExecute(JSONObject json) {

/**

* Checks for success message.

**/

try {

if (json.getString(KEY_SUCCESS) != null) {

String res = json.getString(KEY_SUCCESS);

String red = json.getString(KEY_ERROR);

if (Integer.parseInt(res) == 1) {

JSONObject json_user = json.getJSONObject("user");

setTextRank(json_user.getString(KEY_RANK));

} else if (Integer.parseInt(red) == 1) {

Toast toast = Toast.makeText(getActivity(),

"Noch kein Bild!", Toast.LENGTH_SHORT);

toast.setGravity(Gravity.CENTER

| Gravity.CENTER_HORIZONTAL, 0, 0);

toast.show();

}

else {

Toast.makeText(getActivity(),

"Fehler aufgetreten, bitte nochmal versuchen",

Toast.LENGTH_LONG).show();

}

}

} catch (JSONException e) {

e.printStackTrace();

}

}

}

public void setTextRank(String text) {

TextView textView = (TextView) getView().findViewById(R.id.txtRank);

textView.setText(text);

}

最佳答案

您没有将变量正确传递给sql。

您应该连接字符串,例如:$rownum =mysql_query($sql1);

$sql2 = "SELECT rank, points FROM (

SELECT @rownum := @rownum + 1 AS rank, points, uname

FROM points ORDER BY points DESC

) as result WHERE uname=".$uname;

(我不确定rownum的语法是否会起作用)。

但是,这不是安全的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值