2014-01-15 95 views
0

首先讓我說,我主要是一個iOS開發人員,他最近纔開始探索全棧開發的驚險冒險。我是PHP和MySQL的新手。說了我有一個問題,我希望需要一個直接的解決方案。

我爲一個客戶端創建了新的API,這個客戶端有一個預先存在的數據庫,他們想使用電子郵件地址和密碼來驗證用戶。

我的代碼:

客戶: 我開始了從形式到PHP腳本張貼電子郵件地址和密碼。我已經驗證該帖子是否按預期發生,即我正在接收用戶輸入的電子郵件地址和密碼。 (對於我的問題,只有電子郵件是相關的。)我不想進入「加密你的密碼」的討論。這不是我的問題。

服務器:(爲它的價值,這使用CodeIgniter的框架)

public function authenticateUser() 
{ 
    $user = $_POST['user']; 
    $password = $_POST['password']; 

    $this->load->model('user_model'); 
    // for testing purposes, I'm just trying to echo the email address. 
    echo $this->user_model->authenticateUser('user', $user, $password); 
} 

從user_model的authenticateUser功能:

public function authenticateUser($table, $email, $password) 
    { 
     $sql = "SELECT email FROM " . $table . " WHERE email = " . "$email"; 
     $query = $this->db->query($sql); 
     $row = $query->row(); // this is the line referenced in the error. 

     return $row->email; 
    } 

爲清楚起見,我打電話參數$用戶,直到它傳遞給authenticateUser,然後我把它叫做$ email。顯然這是無關緊要的。

下面是真實正在生成錯誤:

Fatal error: Call to a member function row() on a non-object in /path/to/core/MY_Model.php on line 76 



76 || $row = $query->row(); 

該電子郵件被存儲在用戶表中的數據庫的電子郵件列作爲一個varchar(100)。

如果我使用其他標準(如userId)進行查詢,我可以訪問電子郵件地址,但我無法將該電子郵件地址用作我的查詢的搜索條件。 (對不起,如果我沒有使用適當的命名法)。

有什麼額外的我必須做一個電子郵件地址使用它作爲驗證用戶的方式嗎?我是否全部錯了?任何幫助將不勝感激。

在此先感謝您花時間考慮我的問題。

更新

我解決不了自己的問題,直到8個小時後問,但我想現在更新我的問題讓社會知道,它的解決。這解決了我的問題:

$sql = "SELECT email FROM " . $table . " WHERE email = '".$email."'"; 

非常感謝大家的快速,親切的回覆!:)

+0

這裏的條件應該是WHERE email ='「。$ email。」'「; –

+0

@Rikesh。不需要,我們可以直接使用row,請檢查http://ellislab.com/codeigniter/user-guide/database/ results.html –

回答

0

改變SQL語句模型:

$sql = "SELECT email FROM " . $table . " WHERE email = '" . $email."'"; 
0

變化模型功能的SQL查詢:

$sql = "SELECT email FROM '".$table."" WHERE email = '".$email."'"; 
0

試試這個,

$sql = "SELECT email FROM " . $table . " WHERE email = '$email' "; 

,而不是

$sql = "SELECT email FROM " . $table . " WHERE email = " . "$email"; 
0

錯誤是接近$ email.ie無法正常written.Rewrite代碼

public function authenticateUser($table, $email, $password) 
    { 
     $sql = "SELECT email FROM " . $table . " WHERE email = '".$email."'"; 
     $query = $this->db->query($sql); 
     $row = $query->row(); // this is the line referenced in the error. 

     return $row->email; 
    } 

可以使用活動記錄。該方法易於理解並且沒有複雜的結構。

0

你爲什麼不使用活動記錄

​​
+1

由於時間的限制,我只是簡單地修復語法,但是我會在下一個代碼清理過程中嘗試一下你的解決方案,謝謝你,Kanishka! –

+0

@JasonElwood welcome:D –

0

非常感謝你給大家的快速,親切的答覆。

看來我正在格式化我的查詢字符串不當。

這解決了我的問題:

$ sql =「SELECT email FROM」。 $表。 「WHERE email ='」。$ email。「'」;

再一次,非常感謝。祝你有美好的一天!