使用WHERE AND的多参数化SQL语法无效

时间:2016-11-11 21:26:47

标签: mysql sql codeigniter

以下是我的模型中的代码,我使用Codeigniter,我确定它有一个简单的问题,但我已经尝试了很长时间,任何想法?

<?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;
        }
    }
    }
?>

错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在附近使用&#39;?和密码=?&#39;在第1行

2 个答案:

答案 0 :(得分: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');

答案 1 :(得分:1)

今天我发现下面的工作,SQL语句的参数只需要在一个数组中。

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