簡體   English   中英

從mysqli_multi_query檢索數組。 數組為空?

[英]Retrieving array from mysqli_multi_query. array empty?

基本上,我已經在異步問題上停留了幾天了。 這是:我正在嘗試從數據庫(使用phpmyadmin / mysql在本地)中檢索當前用戶的朋友的姓名(由其ID標識)。 我成功使用此SQL命令(在phpmyadmin上工作)完成了此操作:從用戶中選擇@userid:= users.uid,其中users.username = $ username1; 從users.uid =任意的用戶中選擇users.username(從其中userID = @userid的朋友中選擇friends.friendID);

當我嘗試將其發送到我的Android應用程序時,就會發生問題。 它說該數組為空。 我確定問題出在php代碼中,而不是在適配器中或其他地方,因為我非常成功地將適配器與sql一起使用。 我不明白為什么,因為在phpmyadmin上運行sql時可以獲得很好的數據。 我用mysqli_next_result()和mysqli_store_result()嘗試了很多東西,現在調整了幾天。

這是現在的php代碼:Functions.php

public function getAllFriends($username)
    {
        $username1 = "\"".$username."\"";
        $con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
        $result = mysqli_multi_query($con, "select @userid := users.uid from users where users.username = $username1;
        select users.username from users where users.uid = any (select friends.friendID from friends where userID = @userid)");

        while (mysqli_next_result($con)) {;} // flush multi_queries
        mysqli_query($con, " select @userid := users.uid from users where users.username = $username1; "); 
        mysqli_query($con, "select users.username from users where users.uid = any (select friends.friendID from friends where userID = @userid)");

        $no_of_rows = mysqli_num_rows($result);
        if ($no_of_rows > 0) {
            //$result = mysqli_fetch_array($result);
            return $result;
        } else {
            // user not found
            return false;
        }
    }

index.php文件:

else if ($tag == 'get_all_friends')
    {
        $con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
        $uname = $_POST['username'];
        $user = $db->getAllFriends($uname);
        //$user = "ok";
        $rows = array();

        if ($user) 
        {
            while ($row = mysqli_fetch_array($user, MYSQLI_ASSOC))
            {
                $rows[] = $row;
            }
            //$response["success"] = 1;
            //$response["user"]["uname"] = $user["username"];
            mysqli_close($con);
            //echo json_encode($response);
            echo json_encode($rows);
        } 
        else
        {
            // user failed to store
            $response["error"] = 1;
            $response["error_msg"] = "GET ALL FRIENDS ERROR";
            echo json_encode($rows);
        }
    }

這是日志:

01-25 09:33:26.555: W/dalvikvm(12424): threadid=13: thread exiting with uncaught exception (group=0x413f6378)
01-25 09:33:26.655: E/AndroidRuntime(12424): FATAL EXCEPTION: AsyncTask #3
01-25 09:33:26.655: E/AndroidRuntime(12424): java.lang.RuntimeException: An error occured while executing doInBackground()
01-25 09:33:26.655: E/AndroidRuntime(12424):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at java.lang.Thread.run(Thread.java:856)
01-25 09:33:26.655: E/AndroidRuntime(12424): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
01-25 09:33:26.655: E/AndroidRuntime(12424):    at com.simple.async.AsyncGetAllFriends.doInBackground(AsyncGetAllFriends.java:22)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at com.simple.async.AsyncGetAllFriends.doInBackground(AsyncGetAllFriends.java:1)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-25 09:33:26.655: E/AndroidRuntime(12424):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-25 09:33:26.655: E/AndroidRuntime(12424):    ... 5 more

你看到了嗎?

01-25 09:33:26.655: E/AndroidRuntime(12424): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0

感謝您的幫助!

我發現了問題。 我用錯誤的參數調用了AsyncTask。 對於php,我放棄使用mysqli_multi_query,而是將查詢一分為二。 首先使用AsyncTask查找當前用戶的ID。 然后使用id調用GetAllFriends AsyncTask。 工作正常 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM