Php Mysqli准备的声明不是wokring
我有一个if语句,用于登录页面 我一直在尝试将其转换为mysqli编写的语句。它以前只是普通的mysqli 问题是,无论我输入什么id,它总是说无效id!而不是切换到正确的页面Php Mysqli准备的声明不是wokring,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个if语句,用于登录页面 我一直在尝试将其转换为mysqli编写的语句。它以前只是普通的mysqli 问题是,无论我输入什么id,它总是说无效id!而不是切换到正确的页面 if (isset($_POST['login'])) { require "connect.php"; session_start(); if (count($_POST) > 0) { if ($stmt = mysqli_prepare($conn, "SELECT id, Login_I
if (isset($_POST['login']))
{
require "connect.php";
session_start();
if (count($_POST) > 0)
{
if ($stmt = mysqli_prepare($conn, "SELECT id, Login_ID, Name, User_Role_ID FROM user WHERE Login_ID = ?"));
$lid = $_POST["id"];
$stmt->bind_param("i", $lid);
$stmt->execute();
$stmt->bind_result($id, $Login_ID, $Name, $User_Role_ID);
$_SESSION["Student_DB_ID"] = $id;
$_SESSION["Login_ID"] = $Login_ID;
$_SESSION["Name"] = $Name;
$_SESSION["User_Role_ID"] = $User_Role_ID;
switch ($User_Role_ID)
{
case "2":
header("Location: ../views/student/");
break; //Student
case "1":
header("Location: ../views/admin/");
break; //Admin
default:
echo "Invalid ID!";
}
/* close statement */
$stmt->close();
$conn->close();
}
}
您需要阅读mysqli_stmt_fetch()函数()的文档。该函数仅根据查询是否成功完成返回布尔值。您需要使用bind_result()返回值 编辑: 根据下面的注释,这段代码应该可以工作,您还删除了fetch()调用,这仍然是必需的:
if (isset($_POST['login'])) {
require "connect.php";
session_start();
if (count($_POST) > 0) {
if ($stmt = mysqli_prepare($conn, "SELECT id, Login_ID, Name, User_Role_ID FROM user WHERE Login_ID = ?")) {
$lid = $_POST["id"];
$stmt->bind_param("i", $lid);
$stmt->execute();
$stmt->bind_result($id, $Login_ID, $Name, $User_Role_ID);
$stmt->fetch();
$_SESSION["Student_DB_ID"] = $id;
$_SESSION["Login_ID"] = $Login_ID;
$_SESSION["Name"] = $Name;
$_SESSION["User_Role_ID"] = $User_Role_ID;
switch ($User_Role_ID) {
case "2":
header("Location: ../views/student/");
break; //Student
case "1":
header("Location: ../views/admin/");
break; //Admin
default:
echo "Invalid ID!";
}
/* close statement */
$stmt->close();
$conn->close();
}
}
}
您需要阅读mysqli_stmt_fetch()函数()的文档。该函数仅根据查询是否成功完成返回布尔值。您需要使用bind_result()返回值 编辑: 根据下面的注释,这段代码应该可以工作,您还删除了fetch()调用,这仍然是必需的:
if (isset($_POST['login'])) {
require "connect.php";
session_start();
if (count($_POST) > 0) {
if ($stmt = mysqli_prepare($conn, "SELECT id, Login_ID, Name, User_Role_ID FROM user WHERE Login_ID = ?")) {
$lid = $_POST["id"];
$stmt->bind_param("i", $lid);
$stmt->execute();
$stmt->bind_result($id, $Login_ID, $Name, $User_Role_ID);
$stmt->fetch();
$_SESSION["Student_DB_ID"] = $id;
$_SESSION["Login_ID"] = $Login_ID;
$_SESSION["Name"] = $Name;
$_SESSION["User_Role_ID"] = $User_Role_ID;
switch ($User_Role_ID) {
case "2":
header("Location: ../views/student/");
break; //Student
case "1":
header("Location: ../views/admin/");
break; //Admin
default:
echo "Invalid ID!";
}
/* close statement */
$stmt->close();
$conn->close();
}
}
}
因为您的stmt不是数组。您应该在变量中捕获结果集,然后检查if condition.com,因为stmt不是数组。您应该在变量中捕获结果集,然后检查if条件。抱歉,我的错误,那么$stmt将不是数组,它将是整数,因为您正在从数据库返回一个“id”列。Iv更新了我的代码。if语句已被删除,默认情况下替换为else。但它仍然只显示无效的id。编辑答案,现在应该适合您。您还删除了fetch()调用,这仍然是必需的。我还可以补充一点,那些会话值将很容易被任何有一点点网络知识的人编辑(取决于您存储会话的位置)。我建议建立一个这样的系统只是为了教育目的,而不是将它部署到一个实时网站上。这是为了教育目的。您建议如何存储会话值(当前仅存储在浏览器中)。很抱歉,我的错误是,$stmt将不是数组,它将是整数,因为您正在从数据库返回一个“id”列。Iv更新了我的代码。if语句已被删除,默认情况下替换为else。但它仍然只显示无效的id。编辑答案,现在应该适合您。您还删除了fetch()调用,这仍然是必需的。我还可以补充一点,那些会话值将很容易被任何有一点点网络知识的人编辑(取决于您存储会话的位置)。我建议建立一个这样的系统只是为了教育目的,而不是将它部署到一个实时网站上。这是为了教育目的。建议如何存储会话值(当前仅存储在浏览器中)。