You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP处理AJAX注册请求报PDOException:SQLSTATE[HY093参数不匹配错误

问题根源

你收到的SQLSTATE[HY093]报错是PDO预处理语句的占位符数量和绑定参数数量不匹配导致的,问题出在查询用户是否存在的SQL语句上:

$find_user = $con->prepare("SELECT * FROM usuarios WHERE nickname = '$nickname' LIMIT 1");

你直接把$nickname变量用单引号拼接进了SQL语句,此时预处理语句里根本没有:nickname这个命名占位符,但你后续又调用bindParam(':nickname', $nickname, PDO::PARAM_STR)绑定了1个参数,绑定的参数找不到对应的占位符,就触发了这个报错。

修复方案

1. 修正PHP代码

除了调整预处理语句的写法,还要补充session开启逻辑,否则后续存储$_SESSION会失效:

<?php
require_once "../inc/config.php";
// 开启session才能操作$_SESSION变量
session_start();

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    header("Content-Type: application/json");
    $return_array=[];
    $nickname = strtolower($_POST['nickname']);

     /* 修复查询语句,使用命名占位符 */
    $find_user = $con->prepare("SELECT * FROM usuarios WHERE nickname = :nickname LIMIT 1");
    $find_user->bindParam(':nickname', $nickname, PDO::PARAM_STR);
    $find_user->execute();

    if($find_user->rowCount() == 1){
        $return_array['error'] = "Este usuario ya está registrado";
        $return_array['is_login']= false;
    }else{
        $password =password_hash($_POST['password'],PASSWORD_DEFAULT);
        
        $new_user = $con->prepare("INSERT INTO usuarios (nickname, password) VALUES(:nickname, :password)");
        $new_user->bindParam(':nickname', $nickname, PDO::PARAM_STR);
        $new_user->bindParam(':password', $password, PDO::PARAM_STR);
        $new_user->execute();

        $user_id = $con->lastInsertId();
        $_SESSION['user_id']= (int) $user_id;
        $return_array['redirect']= ''; 
        $return_array['is_login']= true;
    }

    echo json_encode($return_array);

}else{
    exit("Refused");
}
?>

2. 可选修复前端逻辑笔误

你的JS代码中密码校验逻辑存在不一致:提示文案是密码最少8位,但判断条件是长度小于5就触发提示,可以调整为:

}else if(data_form.password.length < 8){
    $("#msg_error").text("Tu password debe ser minimo de 8 caracteres.").show();
    return false;   
}

内容的提问来源于stack exchange,提问作者Ander Canales Medina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:18:04