2013-03-22 150 views
0

在PHP中,當我們編寫並執行一個查詢通過遍歷數組元素,我們使用while循環遍歷在笨控制器

$sql = "SELECT username, role FROM studentlogin WHERE username = '$username' and password = '$password'"; 
     $res = mysql_query($sql); 

      while($row = mysql_fetch_array($res, MYSQL_NUM)){ 
        $uname = $row[0]; 
        $stud_role = $row[1]; 
      } 

然後我們在代碼中使用$ UNAME變量$ stud_role地方。我試圖在codeigniter中做類似的事情,但它失敗了。

function studentlogin($username, $password) 
    { 

     $query = "SELECT username, role FROM studentlogin WHERE username = ? and password = ?"; 
     $result = $this->db->query($query, array($username, $password)); 

     if($result->num_rows() == 1) 
     {    
      return $result; 
     } 

     else 
     { 
      return false; 
     } 
    } 

我如下

$data['info'] = $this->student_model->stdentlogin($username, $password); 

這裏談到的問題,呼籲從控制器此功能。我已經嘗試使用上面的while循環,但它在這裏不起作用。我如何在控制器中分別訪問這兩個值?需要一些幫助。

回答

1

不是返回$ result,而是返回$ result-> row_array();

這將返回您抓取的列的命名散列。它將是一個單元素數組,所以你不需要循環它。

有關在codeigniter中獲取數據庫數據的更多信息,請查看database class information

0

while()在處理循環時評估表達式。如果表達式評估爲TRUE,則循環繼續。如果是FALSE,則停止。這不是最好的地方。 (順便說一下,mysql_*函數在PHP中已被棄用,所以我真的建議忽略它們的工作方式)。

CI Database user guide有很多方便的示例和有關如何從數據庫檢索數據的信息。在你的情況下,如果你正在檢索單行,你應該使用$result->row()$result->row_array(),前者將返回一個stdClass對象,後者是一個關聯數組。