2011-10-07 82 views
2

我不知道這是否合適就在這裏,因爲它更是一個認識問題對我的一部分,但I''m好奇,想知道爲什麼我收到這樣的輸出:數據重複輸入

Response id: 3 Question id: 1 Question: What is my middle name? Title: How Well Do You Know Michael 
Array ([0] => Array ([0] => 3 [r_id] => 3 [1] => 1 [question_id] => 1 [2] => What is my middle name? [question] => What is my middle name? [3] => How Well Do You Know Michael [title] => How Well Do You Know Michael)) 

當我運行這個PHP腳本:

// Grab the response data from the database to generate the form 
    $query = "SELECT qr.response_id AS r_id, qr.question_id, q.question, quiz.title " . 
     "FROM quiz_response AS qr " . 
     "INNER JOIN question AS q USING (question_id) " . 
     "INNER JOIN quiz USING (quiz_id) " . 
     "WHERE qr.user_id = '" . $_SESSION['user_id'] . "'"; 
    $data = mysqli_query($dbc, $query) or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $query"); 
    $questions = array(); 
    while ($row = mysqli_fetch_array($data)) { 
     echo 'Response id: ' . $row['r_id'] . 'Question id: ' . $row['question_id'] . ' Question: ' . $row['question'] . ' Title: ' . $row['title'] . '<br />'; 
     array_push($questions, $row); 
    } 
    print_r($questions); 

它好像有每段數據的兩個條目。例如,在索引[0]和[r_id]下有兩個「Response id」條目。兩者相等3. 難道我擔心我陣列中的重複數據是否令人不安?當我每次做10個查詢時,我正在考慮未來,這是否會影響速度或準確性。任何輸入,非常感謝!

回答

4

如果您查看mysqli_fetch_array的文檔,您會看到第二個參數$result_type,默認設置爲MYSQL_BOTH

這意味着將數字字段索引(MYSQL_NUM)和字段名稱(MYSQL_ASSOC)用作數組索引。所以,如果你只需要的字段名稱索引,你必須使用它像:

while ($row = mysqli_fetch_array($data, MYSQL_ASSOC)) { 
    // .... 
+0

感謝澄清! – Abundnce10

4

這種行爲被忽視。

http://php.net/manual/en/mysqli-result.fetch-array.php

mysqli_fetch_array()是mysqli_fetch_row()函數的擴展版本。除了將數據存儲在結果數組的數字索引中之外,mysqli_fetch_array()函數還可以使用結果集的字段名作爲關鍵字將關聯索引中的數據存儲起來。

2

閱讀http://php.net/manual/en/function.mysql-fetch-array.php,它指出的mysqli_fetch_array()返回值(以同樣的方式爲mysql_fetch_array())同時包含數字索引行數據以及字段名稱索引的行數據。如果您只想要字段名稱索引數據,請使用mysqli_fetch_assoc()

2

採取直出的文檔:

,如果沒有更多的行返回字符串數組對應於提取行,或FALSE。返回數組的類型取決於如何定義result_type。通過使用MYSQL_BOTH(默認),您將得到一個包含關聯和數字索引的數組。使用MYSQL_ASSOC,你只能得到關聯索引(如mysql_fetch_assoc()工作),使用MYSQL_NUM,你只能得到數字索引(如mysql_fetch_row()工作)。

所以更改此:

while ($row = mysqli_fetch_array($data)) { 

要:

while ($row = mysqli_fetch_array($data, MYSQL_ASSOC)) { 

這將只返回字符串鍵,或者也可以使用mysqli_fetch_assoc