[英]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.