2013-12-21 25 views
0

我有這個表在MySQL數據庫對應一個給定的值返回多個值

 
number  | name   | friend 
------------------------------- 
1   |John   | Kloey 
2   |John   | Tara 
3   |Marco   | Tia 
4   |John   | Clara 

我需要在對應於約翰的名字列在一個數組或一個字符串或朋友列的所有名稱什麼,然後我可以在android中接收? 我該怎麼做?

這裏是我的PHP代碼,但它只是返回的第一個名字是kloey只有

$username = $_POST["username"]; 
$recordofusername = mysql_query("SELECT * FROM friends WHERE name='$username'"); 
$value1 = mysql_fetch_array($recordofusername); 
$user_friendname = $value1['friend']; 
$response["userfriends"] = $user_friendname; 

echo json_encode($response); 
+2

看你以前的問題,你真的** **有熟悉[upvoting and accepting](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)答案的概念。如果不這樣做,人們會停止幫助你,因爲你不明白他們的時間和精力。 – peterm

回答

1
  1. 請不要使用過時mysql_*擴展。
  2. 不要內插查詢字符串,導致您的代碼易受sql注入攻擊。通過mysqli_*PDOPDO
  3. 瞭解並使用prepared statements當您得到的結果集中包含多於一行的結果集時,您應該遍歷結果集以獲取所有行,而這些行並不包含在代碼中。這就是爲什麼你的代碼總是從結果集中的第一行獲取唯一的名字。
  4. 請勿使用SELECT *。而是明確地告訴你需要選擇哪些列。在你的情況下,你只需要friend列。

話雖這麼說,給你一個想法,你的代碼可能看起來怎麼樣使用mysqli

$name = $_POST['username']; 
$friends = array(); 
$db = new mysqli('localhost', 'user', 'password', 'dbname'); 
if (!$db) { 
    die('Could not connect: ' . $db->connect_error); //TODO: better error handling 
} 
$sql = "SELECT friend FROM friends WHERE name = ?"; 
if ($stmt = $db->prepare($sql)) { 
    $stmt->bind_param('s', $name); 
    $stmt->execute(); 
    $stmt->bind_result($friend); 

    while ($stmt->fetch()) { // you have to iterate over the resultset 
     $friends[] = $friend; 
    } 
    $stmt->close(); 
} else { 
    die('Prepare failed: ' . $db->error); //TODO: better error handling 
} 
$db->close(); 

$response['userfriends'] = $friends; 
echo json_encode($response); 

輸出示例:

 
{"userfriends":["Kloey","Tara","Clara"]} 
+0

它有幫助嗎? – peterm