PDO报错SQLSTATE[HY093]:绑定变量数与令牌数不匹配问题求助
解决PDO报错:SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
你的问题核心是SQL语句里的占位符被单引号包裹了。PDO的命名占位符不需要加引号,加了之后数据库会把:userName这类内容当成普通字符串字面量,而非参数占位符——这就导致你的SQL语句实际上没有需要绑定的参数,但你却绑定了3个变量,最终触发参数数量不匹配的错误。
修正后的代码如下:
$query="INSERT INTO users (username,pwd,email) values(:userName,:pwd,:Email)"; $stmt=$pdo->prepare($query); $stmt->bindParam(':userName',$username); $stmt->bindParam(':pwd',$password); $stmt->bindParam(':Email',$email); $stmt->execute();
也可以用更简洁的写法,直接将参数数组传给execute:
$query="INSERT INTO users (username,pwd,email) values(:userName,:pwd,:Email)"; $stmt=$pdo->prepare($query); $stmt->execute([ ':userName' => $username, ':pwd' => $password, ':Email' => $email ]);
补充说明:PDO的占位符(无论命名还是问号类型)都不需要手动加引号,PDO会自动处理字符串的转义和引号包裹,同时能有效避免SQL注入问题。
内容的提问来源于stack exchange,提问作者Abdiakir Abdihaji
相关产品推荐
相关产品推荐

