php - 我在 mysql 数据库中插入信息时遇到问题
问题描述
我实际上是 php 和 mysqli 编程的新手,我正在创建登录和注册表单。我在互联网上做了一些关于编码以及如何完成这项工作的研究,当我尝试注册用户时,我遇到了将信息插入 mysql 数据库的问题。我收到消息“ SQLSTATE[HY093]: Invalid parameter number: parameter was not defined ”
require_once 'dbconfig.php';
class USER
{
private $conn;
public function __construct()
{
$database = new Database();
$db = $database->dbConnection();
$this->conn = $db;
}
public function runQuery($sql)
{
$stmt = $this->conn->prepare($sql);
return $stmt;
}
public function lasdID()
{
$stmt = $this->conn->lastInsertId();
return $stmt;
}
public function register($uname,$email,$upass,$code,$spol)
{
try
{
$password = md5($upass);
$stmt = $this->conn->prepare("INSERT INTO tbl_users(userName,userEmail,userPass,tokenCode,spol)
VALUES(:user_name, :user_mail, :user_pass, :active_code, :spol)");
$stmt->bindparam(":user_mail",$email);
$stmt->bindparam(":user_pass",$password);
$stmt->bindparam(":spol",$spol);
$stmt->bindparam(":active_code",$code);
$stmt->execute();
return $stmt;
}
catch(PDOException $ex)
{
echo $ex->getMessage();
}
}
public function login($email,$upass)
{
try
{
$stmt = $this->conn->prepare("SELECT * FROM tbl_users WHERE userEmail=:email_id");
$stmt->execute(array(":email_id"=>$email));
$userRow=$stmt->fetch(PDO::FETCH_ASSOC);
if($stmt->rowCount() == 1)
{
if($userRow['userStatus']=="Y")
{
if($userRow['userPass']==md5($upass))
{
$_SESSION['userSession'] = $userRow['userID'];
return true;
}
else
{
header("Location: index.php?narobe");
exit;
}
}
else
{
header("Location: index.php?inactive");
exit;
}
}
else
{
header("Location: index.php?error");
exit;
}
}
catch(PDOException $ex)
{
echo $ex->getMessage();
}
}
public function is_logged_in()
{
if(isset($_SESSION['userSession']))
{
return true;
}
}
public function redirect($url)
{
header("Location: $url");
}
public function logout()
{
session_destroy();
$_SESSION['userSession'] = false;
}
我不确定我是否在 mysql 表中犯了错误,或者我只是输入了错误的代码。如果有人可以帮助我解决问题,那将是惊人的。
这是mysql表的图像
解决方案
您需要将 $uname 参数添加到绑定参数中,您忘记了一行代码:
$password = md5($upass);
$stmt = $this->conn->prepare("INSERT INTO tbl_users(userName,userEmail,userPass,tokenCode,spol)
VALUES(:user_name, :user_mail, :user_pass, :active_code, :spol)");
$stmt->bindparam(":user_name",$uname);
$stmt->bindparam(":user_mail",$email);
$stmt->bindparam(":user_pass",$password);
$stmt->bindparam(":spol",$spol);
$stmt->bindparam(":active_code",$code);
$stmt->execute();
您不应该使用MD5作为密码的哈希值,您应该使用 php 内置函数password_hash()和password_verify()
推荐阅读
- python - Python:使用格式将大型文本文件转换为数据框
- javascript - HTML画布元素不显示图像
- r - 如何在 r 中通过 CATScore 提取顶级特征?
- google-apps-script - 是否有将谷歌文档转换为谷歌电子表格的功能?
- angular - 如何找到我的表单有一个真实状态的“必需”错误
- go - Golang 是否缓存对 URL 的“http/https”版本的请求?
- c# - c#中存储过程中的await关键字放在哪里
- c# - 在 URL 中自动验证多个 ID(输入)并使用 webbrowser 获取 ID 状态的程序
- amazon-cloudwatch - 如何使用 Packer 配置 CloudWatch 代理?
- node.js - 即使 Req 未通过验证,ExpressJS API 仍将数据插入 DB