1

我正在尝试在我的网站上使用 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,即使用户存在?

4

2 回答 2

1

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

SELECT `password`,`ban` FROM users WHERE `username`=? LIMIT 1
于 2013-09-07T20:53:45.610 回答
0

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

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

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

范围

参数标识符。对于使用命名占位符的准备好的语句,这将是一个形式为 :name 的参数名称。对于使用问号占位符的预处理语句,这将是参数的 1 索引位置。

于 2013-09-07T20:50:00.610 回答