2013-04-18 59 views
0

我有這樣的SQL命令:當我在我的phpMyAdmin運行該命令mysqli_fetch_array讓我重複行

SELECT Username FROM Family WHERE Parent = '$Username' LIMIT 10 

,並把一些$用戶名就可以了,我有這樣的結果:

+----------+ 
| Username | 
+----------+ 
| johndoe | 
+----------+ 

但是當我嘗試這樣的創建功能:

function userParent($Username) 
{ 
global $con; 
$Result = mysqli_query($con, "SELECT Username FROM Family WHERE Parent = '$Username' LIMIT 10"); 
$Result = mysqli_fetch_array($Result); 
return $Result; 
} 

我有這個陣列的回報:

Array ([0] => johndoe [Username] => johndoe) 

所以,當我使用foreach循環類似這樣的「呼叫」功能,即在我的腳本:

$Parent = userParent('james'); 
foreach ($Parent as $value){ 
echo $value . '<br>'; 
} 

我總是有重複的「人johndoe」的回報。我相信這是由mysqli_fetch_array引起的重複行。如何從mysqli_fetch_array解決這個重複的行?

謝謝

+1

您正在使用'mysqli',但完全忽視了[適當的SQL轉義實踐](http://bobby-tables.com/)。如果你使用[SQL佔位符](http://bobby-tables.com/php),你將不會有任何像你似乎在這裏的討厭的SQL注入漏洞。 – tadman

回答

3

mysqli_fetch_array()返回MySQL結果的基於關聯和基於數字的數組。改爲使用mysqli_fetch_assoc()

+0

工程就像一個魅力,兄弟! –

0

看到mysqli_fetch_assoc。該功能省略了數字索引的數組部分。

2

這不是一個騙局,它記錄在http://php.net/mysqli_fetch_array。該函數默認返回一個雙鍵數組(數字+字符串)。如果你只想要一個類型,然後使用特定

mysqli_fetch_row() [numeric only] 
mysqli_fetch_assoc() [keyed only] 
or 
mysqli_fetch_array($result, $fetch_mode); 
+0

當TO使用'mysqli_ *'時,不要談論'mysql_ *'函數...... – bwoebi

+0

@bwoebi:他不是在談論mysql_'。 –

+0

@RocketHazmat他已更新他的帖子... – bwoebi

0

檢查文檔:http://php.net/manual/en/mysqli-result.fetch-array.php,它返回它是什麼應該。

默認情況下,它使用MYSQLI_BOTH,所以數組有都有 *數字和關聯密鑰。將MYSQLI_ASSOCMYSQLI_NUM作爲第二個參數傳遞給mysqli_fetch_array以僅獲取一種索引類型。

$Result = mysqli_fetch_array($Result, MYSQLI_NUM);