Php MYSQLi num_行始终返回0

Php MYSQLi num_行始终返回0,php,mysqli,Php,Mysqli,我试图在我的网站上使用MySQLi,我正在编写一个登录脚本。现在我有一个问题,num_行总是返回值0 这是我的代码 if($query = $mysqli->prepare("SELECT 'password','ban' FROM users WHERE 'username'=? LIMIT 1")){ $query->bind_param('s', $username); $query->execute();

我试图在我的网站上使用MySQLi,我正在编写一个登录脚本。现在我有一个问题,num_行总是返回值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,即使用户存在?

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

发件人:

公共bool语句::bindParam(混合$parameter,混合 &$variable[,int$data_type=PDO::PARAM_STR[,int$length[,mixed $driver\u选项]]])

参数

参数标识符。对于使用命名 占位符,这将是表单的参数名称:name。暂时 使用问号占位符准备语句,这将是 1-参数的索引位置


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

发件人:

公共bool语句::bindParam(混合$parameter,混合 &$variable[,int$data_type=PDO::PARAM_STR[,int$length[,mixed $driver\u选项]]])

参数

参数标识符。对于使用命名 占位符,这将是表单的参数名称:name。暂时 使用问号占位符准备语句,这将是 1-参数的索引位置


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


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


我没有看到您检查任何查询是否失败。您如何知道
->execute()
成功了?我没有看到您检查任何查询是否失败。您如何知道
->execute()。它们只会增加视觉上的混乱,只是你犯语法错误的又一种方式。你需要它们的唯一原因是如果你有一个保留字的列名,而使用保留字的列名是一个糟糕的主意,所以这是两个你可以同时避免的坏习惯。@AndyLester:我建议在我的答案中添加你的评论:)+1到Akam关于使用正确引号的答案中,Andy建议避免使用保留字作为表名和列名。但是,如果在标识符中使用国际字符,也需要分隔标识符。如果你说那种语言,使用特殊字符是完全合法的!:-)更好的是,不要引用/反勾选列和表名。它们只会增加视觉上的混乱,只是你犯语法错误的又一种方式。你需要它们的唯一原因是如果你有一个保留字的列名,而使用保留字的列名是一个糟糕的主意,所以这是两个你可以同时避免的坏习惯。@AndyLester:我建议在我的答案中添加你的评论:)+1到Akam关于使用正确引号的答案中,Andy建议避免使用保留字作为表名和列名。但是,如果在标识符中使用国际字符,也需要分隔标识符。如果你说那种语言,使用特殊字符是完全合法的!:-)
SELECT `password`,`ban` FROM users WHERE `username`=? LIMIT 1