我正在尝试将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,即使用户存在?
答案 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参数的索引位置。