MYSQLi num_rows总是返回0

时间:2013-09-07 20:45:54

标签: php mysqli

我正在尝试将MySQLi用于我的网站,我正在编写登录脚本。现在我有一个问题,num_rows总是返回值0

所以这是我的代码

if($query = $mysqli->prepare("SELECT 'password','ban' FROM users WHERE 'username'=? LIMIT 1")){
            $query->bind_param('s', $username);
            $query->execute();
            $query->bind_result($db_password,$ban);                 
            $query->store_result();
            $query->fetch();
            $numrows = $query->num_rows;        

            if($numrows == 1){
                if($ban == 0)
                {
                    if($db_password == $password)
                    {
                        $_SESSION['login'] = 'ok';
                        //$_SESSION['id'] = $id;
                        //$_SESSION['realname'] = preg_replace("/[^a-zA-Z0-9_\-]+/","",$realname);
                        header("Location: /ematura/index.php");
                        $query->close();
                    }else{
                    die("Napaka");
                    }
                }else{
                    die("Račun zaklenjen");
                }
            }

我的问题是,为什么num_rows总是为0,即使用户存在?

2 个答案:

答案 0 :(得分:1)

列名不应该用单引号或双引号括起来,而是可以使用反引号(`)

SELECT `password`,`ban` FROM users WHERE `username`=? LIMIT 1

答案 1 :(得分:0)

我认为您没有正确绑定,请尝试更改为:$query->bind_param(1, $username);

来自:http://php.net/manual/en/pdostatement.bindparam.php

  

public bool PDOStatement :: bindParam(mixed $ parameter,mixed   & $ variable [,int $ data_type = PDO :: PARAM_STR [,int $ length [,mixed   $ driver_options]]])

     

<强>参数

     

参数标识符。对于使用named的预准备语句   占位符,这将是表单的参数名称:name。为一个   准备好使用问号占位符的声明,这将是   1参数的索引位置。