php - 从 MySQL 表获取排名到 TextView

标签 php android mysql sql

我有一个 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, String, JSONObject> {

        String uname;

        @Override
        protected void onPreExecute() {

            super.onPreExecute();

            DatabaseHandler db = new DatabaseHandler(getActivity());

            // Hashmap to load data from the Sqlite database
            HashMap<String, String> user = new HashMap<String, String>();

            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 的语法是否有效)。 然而,这不是安全的方法。

关于php - 从 MySQL 表获取排名到 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25629800/

相关文章:

android - 如何在 NFC 中获取 Android 手机 UID

mysql - 在 ubuntu 中重新安装 mysql-client 在 openSIPS menuconfig 工具中出现错误

mysql - 使用 pgloader 将 mysql 迁移到 postgres

php - 使用 CSS 的一个特定页面出现奇怪的格式问题

php - 没有结果的 Mysql 查询的 Echo 0

php - 没有给出 mime 类型

javascript - 没有 MongoDB 的 Meteor Mysql 和 Session

php - 谷歌管理员 SDK : You are not authorized to access this API

Android,动态调整按钮的z-index?

android - 在 Android 中下载背景图片时需要帮助吗?