2014-09-12 80 views
0

我試圖將查詢的結果提取到我的數據庫中。當結果集只有一行時,我沒有問題,但當它是多行時,我只能得到第一行。在二維數組中保存MySQL結果 - php

這裏是我的分貝:

-----keys------------------- 
| id | key_nbr | date | 
---------------------------- 
| 42 | abc123 | xxxx | 
| 49 | 789xyz | wxyz | 
---------------------------- 

我的功能:

Array ([id] => 42 [key_nbr] => abc123 [date] => xxxx)如何使它打印所有行:做的時候print_r($row);只有第一排

function get_key_info($mysqli) { 
    if (isset($_SESSION['user_id'], $_SESSION['username'], $_SESSION['login_string'])) { 
     $user_id = $_SESSION['user_id']; 
     if ($stmt = $mysqli->query("SELECT id, key_nbr, date FROM keys WHERE id=$user_id")){ 
      $row = $stmt->fetch_array(MYSQLI_ASSOC); 
      return $row; 
     } 
    } 
    return null; 
} 

輸出?

+0

['$行= $ stmt-> fetch_all(MYSQLI_ASSOC);'](http://php.net/manual/en/mysqli-result.fetch-all.php)代替'$行= $ stmt-> fetch_array(MYSQLI_ASSOC);' – Sean 2014-09-12 16:21:37

+1

旁註:['keys'](http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html)是一個MySQL保留關鍵字。用反引號'\'換行或用其他名稱。使用[**錯誤報告**](http://php.net/manual/en/function.error-reporting.php),你很可能沒有這樣做,將會發出錯誤信號。始終使用錯誤報告。 – 2014-09-12 16:32:00

回答

2

您必須檢查提取數據之前的總行數,如果它不爲零,則執行循環並提取所有記錄。

function get_key_info($mysqli) { 
    if (isset($_SESSION['user_id'], $_SESSION['username'], $_SESSION['login_string'])) { 
     $user_id = $_SESSION['user_id']; 
     if ($stmt = $mysqli->query("SELECT id, key_nbr, date FROM keys WHERE id=$user_id")){ 
      if($stmt->num_rows != 0) { 
       $row = array(); 
       while($r = $stmt->fetch_array(MYSQLI_ASSOC)) { 
        $row[] = $r; 
       } 
       return $row; 
      } 
     } 
    } 
    return null; 
} 
+0

謝謝隊友。這工作。 – Chris 2014-09-12 17:02:45