2013-12-21 28 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