2013-07-02 29 views
-1

所以我正在爲我的教授進行一項調查,我決定嘗試從頭開始編寫代碼。對兩個查詢使用fetch_array

我嘗試過使用JOIN但它只是不是我想要的,因爲我基本上試圖在/ foreach循環之間尋找問題之間的選項。

當我嘗試加入時,它爲每個不同的選項提供了一個問題條目,爲每個選項重複提問。

我的數據庫已設置好,所以我在一個表中有問題(帶有問題和optiongroupid),並且我有Optiongroups(差 - 極好|不滿意 - 滿意)。

這是我目前的PHP代碼:

$qry = "SELECT QuestionName, QuestionSubtext, OptionGroupID FROM Questions;"; 
    $qry2 = "SELECT OptionChoiceName, OptionGroupID FROM OptionGroups;"; 

    $result = $mysqli->query($qry); 
    $option = $mysqli->query($qry2); 

    while($row = $result->fetch_array()) 
     { 
      $rows[] = $row; 
     } 
    while($row = $option->fetch_array()) 
     { 
      $rows2[] = $row; 
     } 
    foreach($rows as $row) 
     { 
      echo '<font size=4><strong>' . $row['QuestionSubtext'] . '. ' . $row['QuestionName'] . '</strong></font>'; 
      echo '<div id="options">'; 
      foreach($rows2 as $rows) 
      { 
       if ($rows['OptionGroupID'] = $row['OptionGroupID']) 
       { 
        echo '<input type="radio" name="satisfy[]" value="' . $rows['OptionChoiceName'] . '">' . $rows['OptionChoiceName'] . '</input>'; 
       } 
      } 
      echo "</div>"; 
      echo "<br>"; 
     } 

我在這裏的大問題,現在我得到PHP Fatal error: Call to a member function fetch_array() on a non-object in /var/www/test/alumni.php on line 66

66號線是while($row = $option->fetch_array())

人有一些輸入?我試圖做的只是不可能?還是我以一種非常糟糕的方式去解決它?

感謝

+0

當你var_dump($選項)時,你會得到什麼?我的猜測是,你沒有得到一個有效的結果集資源,這意味着你應該檢查MySQL錯誤(你目前沒有)。 –

+0

先執行選項查詢,將其讀入數組,然後遍歷第二個查詢的每個結果的數組 – steven

回答

1

mysqli->query()確實不是總是返回一個mysqli_result對象。如果執行查詢時出錯,它將返回FALSE。如果$ result具有標量FALSE值,則致電$result->fetch_array()是致命錯誤。

您應該始終驗證mysqli->query()未返回FALSE。

$result = $mysqli->query($qry); 
if ($result === false) { 
    trigger_error($mysqli->error, E_USER_ERROR); 
} 

一旦輸出錯誤,您將更深入瞭解爲什麼查詢不起作用。例如,您可能拼錯了列名,或者您沒有權限讀取表或發生其他錯誤。除非您檢查錯誤,否則您不會知道。

+0

非常感謝,這幫助我調試並自行解決,以便學習。問題是我從錯誤的表中選擇了列 – user2543691

0

mysqli->query()總是返回mysqli_result對象。

所以首先要檢查的,而不是進入迭代循環$是否導致$選項是有效的對象或不是。