Php 卡住无效参数编号:绑定变量的数量与令牌的数量不匹配
我已经在这个问题上纠缠了很长一段时间,我似乎找不到另一个与我的情况相匹配的答案 在我的用户类中:Php 卡住无效参数编号:绑定变量的数量与令牌的数量不匹配,php,mysql,pdo,Php,Mysql,Pdo,我已经在这个问题上纠缠了很长一段时间,我似乎找不到另一个与我的情况相匹配的答案 在我的用户类中: public function register($uFirstName,$uLastName,$uCompany,$uEmail,$uPassword,$uAccess) { try { $newPassword = password_hash($uPassword, PASSWORD_DEFAULT); $stmt
public function register($uFirstName,$uLastName,$uCompany,$uEmail,$uPassword,$uAccess)
{
try
{
$newPassword = password_hash($uPassword, PASSWORD_DEFAULT);
$stmt = $this->db->prepare("INSERT INTO users(FirstName,LastName,Company,Email,Password,Access) VALUES (:uFirstName,uLastName,uCompany,uEmail,uPassword,uAccess)");
$stmt->bindparam("uFirstName", $uFirstName);
$stmt->bindparam("uLastName", $uLastName);
$stmt->bindparam("uCompany", $uCompany);
$stmt->bindparam("uEmail", $uEmail);
$stmt->bindparam("uPassword", $uPassword);
$stmt->bindparam("uAccess", $uAccess);
$stmt->execute();
return $stmt;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
在我的表单页面中:
if(isset($_POST['btn-signup']))
{
$uFirstName = trim($_POST['regFirstName']);
$uLastName = trim($_POST['regLastName']);
$uCompany = trim($_POST['regCompany']);
$uEmail = trim($_POST['regEmail']);
$uEmailVerify = trim($_POST['regEmailVerify']);
$uPassword = trim($_POST['regPassword']);
$uAccess = 0;
if ($uEmail != $uEmailVerify) {
$error = "Emails Don't Match";
}
else if (!filter_var($uEmail, FILTER_VALIDATE_EMAIL)) {
$error = "Please Enter a Valid Email";
}
else if (strlen($uPassword) < 6) {
$error = "Password must be at least 6 characters";
}
else {
try
{
$stmt = $DB_con->prepare("SELECT Email FROM users WHERE Email=:uEmail");
$stmt->execute(array(':uEmail' => $uEmail));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row['Email'] == $uEmail) {
$error = "Email is Already Registered, Log In Instead";
}
else {
if ($user->register($uFirstName,$uLastName,$uCompany,$uEmail,$uPassword,$uAccess)) {
$user->redirect('http://facebook.com');
}
}
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}
}
if(isset($\u POST['btn-signup']))
{
$uffirstname=trim($_POST['regFirstName']);
$uLastName=trim($_POST['regLastName']);
$uCompany=trim($_POST['regCompany']);
$uEmail=trim($_POST['regEmail']);
$uEmailVerify=trim($_POST['regEmailVerify']);
$uPassword=trim($_POST['regPassword']);
$uAccess=0;
如果($uEmail!=$uEmailVerify){
$error=“电子邮件不匹配”;
}
如果(!filter_var($uEmail,filter_VALIDATE_EMAIL)){
$error=“请输入有效的电子邮件”;
}
否则如果(strlen($uPassword)<6){
$error=“密码必须至少包含6个字符”;
}
否则{
尝试
{
$stmt=$DB_con->prepare(“从电子邮件=:uEmail的用户选择电子邮件”);
$stmt->execute(数组(':uEmail'=>$uEmail));
$row=$stmt->fetch(PDO::fetch_ASSOC);
如果($row['Email']=$uEmail){
$error=“电子邮件已注册,请改为登录”;
}
否则{
if($user->register($uFirstName、$uLastName、$uCompany、$uEmail、$uPassword、$uAccess)){
$user->redirect($user)http://facebook.com');
}
}
}
捕获(PDO$e)
{
echo$e->getMessage();
}
}
}
在这里查看您的值
VALUES (:uFirstName,uLastName,uCompany,uEmail,uPassword,uAccess)
您只绑定了第一个,而没有绑定其他
编辑: 我看到您在第二段代码中没有使用,只是检查电子邮件是否存在 如果您对此有任何问题,请访问ircmaxell的答案之一 从这个答案中可以看出: 登录时:
$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
if (password_verify($_POST['password'], $users[0]->password) {
// valid login
} else {
// invalid password
}
} else {
// invalid username
}
您丢失了大量冒号您需要在sql中的每个绑定参数之前添加一个冒号,在开始时有一个冒号,然后重置丢失。然后,您需要在
bindParam(':param',$param)
调用中使用冒号,我很快就会听到一个答案…'-)不,不!你在@Fred ii-@RamRaider中开火,不仅在值中是必需的/必需的“然后你也需要在bindParam(':param',$param)调用中使用冒号”天哪,我不敢相信我错过了。周一:(@Mr.Smithyyy给我来一杯浓缩咖啡;-)干杯:)我会接受的,谢谢你没有在这件事上严厉批评我。@Mr.Smithyy没问题。我对我关于密码的回答进行了编辑。@smithyy-duh先生,请注意。我注意到你正在使用密码\u散列,我会删除它。编辑:完成。