【发布时间】:2013-12-03 18:28:01
【问题描述】:
我正在为我的 Web 应用程序创建一个登录脚本,并尝试使用 $count = mysqli_stmt_num_rows($stmt); 来查找从 sql select 语句返回的行数,这样我就可以决定是否应该启动会话。
问题是,$count 始终为 0,即使我输入了与数据库中的数据匹配的有效用户名和密码。我已经测试了 select 语句,它工作正常。没有给出错误、语法、SQL 或其他信息,所以我有点不知道发生了什么。
代码:
<?php
$link = mysqli_connect("localhost", "****", "****", "****");
//check connection
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// Move to MySQL(i) as MySQL is now obslete and use Prepare statment for protecting against SQL Injection in better and easier way
$stmt = mysqli_prepare($link, 'SELECT username, password FROM `users` WHERE `username` = ? AND `password` = ?');
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "ss", $myusername, $mypassword);
/* execute query */
mysqli_stmt_execute($stmt);
/*count number of rows returned*/
$count = mysqli_stmt_num_rows($stmt);
/*display number of rows returned*/
//echo $count;
/* bind result variables */
mysqli_stmt_bind_result($stmt, $myusername, $mypassword);
/* fetch value */
mysqli_stmt_fetch($stmt);
/* close statement */
mysqli_stmt_close($stmt);
if($count == 1) {
session_start();
$_SESSION['userid'] = $myusername;
header("location:index.php");
exit;
} else {
echo "Wrong Username or Password";
echo "<form name='form5' action='main_login.html'>";
echo "<input type='submit' name='Submit' value='Log-in'>";
echo "</form>";
}
/* close connection */
mysqli_close($link);
?>
【问题讨论】:
-
您查看过
mysqli_stmt_num_rows文档吗? PS:为什么不用sqlCOUNT来代替呢? -
你需要在数据库中存储encrypted passwords
标签: php session mysqli mysql-num-rows