Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 卡住无效参数编号:绑定变量的数量与令牌的数量不匹配_Php_Mysql_Pdo - Fatal编程技术网

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散列,我会删除它。编辑:完成。