2016-11-11 57 views
1

下面是我的模型的代碼,我使用的是笨多參數SQL語法無效,我敢肯定有它一個簡單的問題,但我一直在努力了很長一段時間,任何想法?使用WHERE和

<?php 
    class Users_model extends CI_Model { 

    public function __construct() { 
     parent::__construct(); 
     $this->load->database(); 
    } 

    public function checkLogin($username, $pass) { 
     $sql = "SELECT COUNT(*) FROM Users WHERE username=? AND password=?;"; 
     $query = $this->db->query($sql, $username, sha1($pass)); 

     if ($query -> num_rows() == 1) { 
      return True; 
     } else { 
      return False; 
     } 
    } 
    } 
?> 

錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AND password=?' at line 1

+0

您能更準確地瞭解您遇到的問題嗎?你看到什麼PHP錯誤? – lovasoa

+0

當然,請參閱編輯@lovasoa – js864

+0

雖然它不會解決問題,但爲何不選擇'SELECT COUNT(*)FROM Users WHERE username =? AND password =?;'? –

回答

2

如果$this->dbPDO object,比its query method不允許使用參數綁定。

您將不得不使用prepared statement。您的代碼將如下所示:

$sql = "SELECT COUNT(*) as count FROM Users WHERE username=:user AND password=:pass"; 
$sth = $this->db->prepare($sql); 
$sth->execute(array(':user' => $username, ':pass' => sha1($pass))); 
$count = $sth->fetch(PDO::FETCH_COLUMN, 'count'); 
+0

值得一提的是,在PDO中使用命名參數佔位符不是必需的。你可以使用位置參數('?'佔位符)。但是你不能在同一個SQL查詢中使用這兩種樣式。 –

1

今天我發現下面的工作,SQL語句的參數只需要在一個數組中。

$query = $this->db->query($sql, array($username, sha1($pass)));