当我尝试在代码中用mysql_*
替换mysqli_*
时,我遇到了一些麻烦。除mysql_result
外,一切正常。我已经找到了答案,但我是初学者,所以我在理解方面遇到了很多麻烦。似乎mysqli_result
不存在或者至少不起作用。
我目前的登录代码,mysql_result看起来像这样:
if (isset($_POST['submit'])){
$sql = "SELECT membersid FROM members
WHERE user='{$_POST['user']}'
AND pass='{$_POST['passwd']}'";
$result = query($con, $sql);
// If not username or password found, return to index.
if (mysqli_num_rows($con, $result) == 0){
header("Location: index.php?badlogin=");
exit;
}
// Unique index for session.
$_SESSION['sess_id'] = mysql_result($result, 0); //Here is my problem
$_SESSION['sess_user'] = $_POST['user'];
header("Location: hem.php");
exit;
}
// Logout.
if (isset($_GET['logout'])){
$_SESSION = array();
session_destroy();
header("Location: index.php");
exit;
}
它不能正常工作。我收到“用户名或密码不正确”。但是在我开始用mysqli替换mysql之前它已经运行了。我的问题是,如何替换mysql_result
代码以使脚本的这部分工作?
答案 0 :(得分:1)
假设您的查询方法使用mysqli,那么$result
可能是mysqli_result个对象。您可以使用以下方法获取行和字段:
$row = $result->fetch_array();
$_SESSION['sess_id'] = $row[0];
说明:
$result
是表示查询结果的mysqli_result对象
在此上调用fetch_array()
将返回结果的下一行(如果没有更多行,则返回false)。因此,这将一行作为数组放入$row
变量中
最后,我们使用$row[0]
抓取该行中的第一列。
答案 1 :(得分:1)
我觉得你很亲密。但你仍然对SQL注入持开放态度。您不应该直接在查询中包含$_POST
。阅读Bobby Tables上的SQL注入预防的更多信息。
本
中修复的问题$sql
应为$result
mysql_result
是严肃的旧学校,mysqli
没有相应的内容。我强烈建议你使用像mysqli_fetch_assoc 代码块
if(isset($_POST['submit'])){
$result = mysqli_query($con, "SELECT membersid FROM members
WHERE user='{$_POST['user']}'
AND pass='{$_POST['passwd']}'");
// If not username or password found, return to index.
if(mysqli_num_rows($result) == 0){
header("Location: index.php?badlogin=");
exit;
}
// Unique index for session.
$row = mysqli_fetch_assoc($result);
$_SESSION['sess_id'] = $row['membersid'];
$_SESSION['sess_user'] = $_POST['user'];
header("Location: hem.php");
exit;
}