2016-11-19 296 views
1

我正在研究一個小項目,並且發現使用以下代碼循環訪問列值實際上是打印兩次。 例如:MySQL循環遍歷列

admin 
admin 
user 
user 
... 

等等。下面是代碼:

$sql = "SELECT username FROM users"; 
$result = mysqli_query($db, $sql); 
while($row = mysqli_fetch_array($result)) 
{ 
foreach($row as $elem) 
{ 
echo $elem . "<br/>"; 
} 
} 

是影響的foreach while循環,並使得它執行兩次?也許是一個錯字?

回答

0

發生這種情況是因爲mysqli_fetch_array()獲取行兩次 - 一次以列作爲索引,一次以編號索引。

您可以改爲使用mysqli_fetch_assoc(),或者使用mysqli_fetch_array($result, MYSQLI_ASSOC),它只能以列作爲鍵而不是兩者來獲取它。

例如,在$row變量var_dump()使用mysqli_fetch_array()時可以給

array(2) { 
    [0]=> 
    string(5) "admin" 
    ["username "]=> 
    string(5) "admin" 
} 
array(2) { 
    [0]=> 
    string(4) "user" 
    ["username "]=> 
    string(4) "user" 
} 

所以你可以說,它取得這些值的兩倍,具有不同的關鍵指標。這樣做如上(mysqli_fetch_array($result, MYSQLI_ASSOC)mysqli_fetch_assoc($result))建議將只取以下

array(1) { 
    ["username "]=> 
    string(5) "admin" 
} 
array(1) { 
    ["username "]=> 
    string(4) "user" 
} 

參考

+0

謝謝,我有第二個變量的代碼片段,但我刪除了'MYSQLI_ASSOC',看看沒有它會發生什麼,認爲我可能會在以後谷歌。謝謝! –

+0

很高興爲您解決!通常情況下,如果您不確定某些內容,文檔會保留答案:-) – Qirel

0

希望這對你的作品

$sql = "SELECT username FROM users"; 
    $result = mysqli_query($db, $sql); 
    while($row = mysqli_fetch_array($result)) 
    { 
     $name = $row['username']; // taking saving row in variable name 
    echo $name . "<br/>"; 
    } 
0

您需要放在 如果你想循環遍歷每個元素,可以使用數組中的行。

while($row = mysqli_fetch_array($result)){ 
    $rows[] = $row; 
} 

foreach($rows as $elem){ 
    echo $elem . "<br/>"; 
} 

你現在正在做的是循環遍歷每行,然後遍歷每行的每個元素。所以是的,那會打印兩次。

+0

不可以。這是mysqli_fetch_ARRAY vs ASSOC。 –

+0

無論如何謝謝您的支持! –