Php MYSQLi num_行始终返回0
我试图在我的网站上使用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();
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